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。