您的位置:

Python正则表达式基础:强大的文本处理工具

正则表达式(Regular Expression),简称Regex或RegExp,是一种用来匹配字符串的强大工具。Python内置的re模块可以让我们轻松使用正则表达式对字符串进行检索、替换、分割等操作,这为文本处理提供了很大的便利。

一、基础语法

正则表达式是由普通字符和一些特殊字符组成的,可以用来描述字符的特征、数量、出现次序等。下面是一些基础的正则表达式。

.  匹配任意字符,不包括换行符
\w 匹配字母、数字或下划线
\s 匹配任意空白字符,包括空格、制表符、换页符等
\d 匹配数字
^  匹配字符串的开始
$  匹配字符串的结束
[] 匹配中括号中的任意一个字符
|  匹配 | 左右两侧的任意一个正则表达式
() 分组,可以对一部分正则表达式进行操作
*  匹配前面的表达式0次或多次
+  匹配前面的表达式1次或多次
?  匹配前面的表达式0次或1次
{n} 匹配前面的表达式n次
{n,} 匹配前面的表达式至少n次
{n,m} 匹配前面的表达式n次到m次

例如,我们使用正则表达式 \d{3}-\d{5} 来匹配邮政编码,其中 \d 表示匹配数字,{3}表示匹配3次,-表示匹配横杆。这里的正则表达式的意思是先匹配3个数字,再匹配一个横杆,然后再匹配5个数字。

二、常用操作

re模块提供了很多常用的操作函数,这里介绍3个最常用的操作:search、match和sub。

1. search

search函数用来检索字符串中是否有符合正则表达式的内容,如果查找成功,返回一个Match对象,否则返回None。

import re

# 查找邮箱地址
text = "我的邮箱是lichang@mail.com。"
pattern = r'\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}'
result = re.search(pattern, text)
if result:
    print(result.group())  # 输出lichang@mail.com
else:
    print("未找到邮箱地址。")

2. match

match函数用来判断字符串开头是否符合正则表达式,如果符合,返回一个Match对象,否则返回None。

import re

# 检查手机号码
text = "我的手机号码是18012345678。"
pattern = r'^1\d{10}$'
result = re.match(pattern, text)
if result:
    print(result.group())  # 输出18012345678
else:
    print("未找到手机号码。")

3. sub

sub函数用来替换字符串中符合正则表达式的内容。

import re

# 替换字符串
text = "I love Python!"
pattern = r'\bPython\b'
result = re.sub(pattern, "Java", text)
print(result)   # 输出I love Java!

三、高级应用

正则表达式还有很多高级应用,这里介绍3个最常见的:分组、零宽断言和贪婪与非贪婪匹配。

1. 分组

正则表达式使用 () 来进行分组,可以对分组内容进行重复或者替换。

import re

# 替换文字
text = "2019年10月10日"
pattern = r'(\d{4})年(\d{2})月(\d{2})日'
result = re.sub(pattern, r'\1-\2-\3', text)
print(result)   # 输出2019-10-10

2. 零宽断言

零宽断言指的是匹配内容的前面或者后面应该满足一定的条件,但是这些条件不包括在匹配结果中。

import re

# 查找http链接
text = "我的个人网站是http://www.lichang.net,欢迎来访问。"
pattern = r'(?<=http://)[a-zA-Z0-9]+\.[a-zA-Z]+'
result = re.search(pattern, text)
if result:
    print(result.group())  # 输出www.lichang.net
else:
    print("未找到链接。")

3. 贪婪与非贪婪匹配

正则表达式默认是贪婪模式,即尽可能多地匹配内容。非贪婪模式使用 ? 来标识,表示尽可能少地匹配内容。

import re

# 正则表达式在匹配字符串时尽可能多地匹配内容
text = "

Title