Python 之正则表达式 re 模块
正则表达式是一个用于描述在文本中匹配(或不匹配)一些字符序列的模式,可以用于对文本进行增强型的查找、替换和提取操作。Python 通过 re 模块来支持正则表达式操作。
基本语法
正则表达式包含普通字符和元字符两种内容。
- 普通字符:字母、数字等普通字符代表它自身,如字母 a 匹配字符 a。
- 元字符:具有特殊含义的字符,如 "."、"*" 表示任意字符和任意重复次数。
使用 re 模块进行匹配时,首先需要使用 re.compile()
方法编译正则表达式,然后使用编译后的正则表达式进行匹配。
import re
# 编译正则表达式
pattern = re.compile(r'hello')
# 在文本中搜索
result = pattern.search('hello,world!')
if result:
print("Found")
else:
print("Not found")
常用方法
-
search()
:在文本中搜索符合正则表达式模式的第一处字符串,并返回一个匹配对象。 -
match()
:从字符串的起始位置开始搜索符合正则表达式模式的第一处字符串,并返回一个匹配对象。 -
findall()
:返回所有符合正则表达式模式的非重叠匹配字符串列表。 -
sub()
:用指定字符串替换所有符合正则表达式模式的非重叠匹配字符串。 -
split()
:使用正则表达式模式拆分字符串,并返回拆分后的列表。 -
finditer()
:搜索符合正则表达式模式的字符串,并返回一个匹配结果的迭代器对象。
import re
# 字符串匹配
result = re.search(r'h\w+', 'hello,world!')
if result:
print(result.group(0))
# 字符串替换
result = re.sub(r'\w+@\w+', 'secret', 'my email is john@example.com')
print(result)
# 查找所有匹配项
result = re.findall(r'\d+', 'There are 3 cars and 200 people')
print(result)
正则表达式的语法规则
正则表达式使用不同的元字符和字符组合来实现模式匹配,下面是正则表达式的常用语法规则:
元字符 | 描述 |
. | 匹配任意一个字符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
* | 匹配前面出现的字符零次或者多次 |
+ | 匹配前面出现的字符一次或者多次 |
? | 匹配前面出现的字符零次或者一次 |
{n} | 匹配前面出现的字符 n 次 |
{m,n} | 匹配前面出现的字符 m 到 n 次 |
[...] | 匹配方括号中的字符或者字符组合 |
[^...] | 匹配除了方括号中指定的字符或字符组合以外的所有字符 |
(…) | 匹配括号中的表达式,并返回匹配结果 |
学习资源
在线练习网站 regex101 提供了在线调试正则表达式的工具,可以在右侧的实时反馈窗口查看任何正则表达式的解析情况。同时,在线练习网站 regexone 和 regexr 可以提供更多练习机会和海量案例供参考。
更多正则表达式的语法,可以参考 Python 官方文档 re — Regular expression operations。