3551

18 分钟

#Python 正则表达式的使用

在 Python 中通过 re 模块使用正则表达式,下表是其常用的函数:

接口说明示例
match检查字符串是否匹配正则表达式查看
search查找字符串中匹配正则表达的第一个子串查看
findall查找字符串中匹配正则表达的所有子串查看
sub将字符串中匹配正则表达的子串进行替换查看
split通过字符串中匹配正则表达的子串分割字符串查看
compile编译正则表达式查看

由于正则表达式本身存在转义语法,因此通常使用 Python 的 原始字符串 编写正则表达式,避免多次转义。

例如:

正则表达式含义普通字符串的表示形式原始字符串的表示形式
\n匹配一个换行符'\\n'r'\n'
\\n匹配文本 '\n''\\\\n'r'\\n
\r匹配一个回车符'\\r'r'\r'
\\r匹配文本 '\r''\\\\r'r'\\r
\t匹配一个制表符'\\t'r'\t'
\\t匹配文本 '\t''\\\\t'r'\\t

#匹配校验 match

使用 re.match 函数校验字符串是否匹配指定的正则表达式。

例如校验字符串是否是有效的邮箱地址:

import re # 验证电子邮件格式 email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$' if re.match(email_pattern, "[email protected]"): print("有效邮箱")

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#文本搜索

#单项搜索 search

使用 re.search 函数从字符串中搜索匹配指定正则表达式的第一个子串。

re.search 的返回值是一个 Match 对象,可用作为条件判断是否匹配成功。

通过 Match 对象的 group 方法读取匹配到的子串,其中:

  • 0 为匹配的整个子串
  • 1 为第一个括号包裹的子匹配
  • 以此类推。

例如从订单信息中提取订单号和日期:

import re text = "订单号: 12345, 日期: 2023-08-15" match = re.search(r'订单号: (\d+), 日期: (\d{4}-\d{2}-\d{2})', text) if match: print(0, match.group(0)) # 0 是匹配的整个子串 print(1, match.group(1)) # 1 是第一个括号包裹的子匹配 print(2, match.group(2)) # 2 是第二款括号包裹的子匹配

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#搜索全部 findall

使用 re.findall 函数从字符串中搜索匹配指定正则表达式的所有子串。

注意,re.findallre.search 不同:

  • 如果没有使用子匹配,re.findall 的返回值是字符串数组
  • 如果使用了子匹配,re.findall 的返回值是元组的数组,元组中只有子匹配的字符串,如果要包含完整匹配,则需要在正则表达式最外面加一层括号

例如从订单列表中获取所有订单号和日期:

import re text = ''' 订单号: 10001, 日期: 2023-08-15 订单号: 10002, 日期: 2023-08-16 订单号: 10003, 日期: 2023-08-17 订单号: 10004, 日期: 2023-08-18 订单号: 10005, 日期: 2023-08-19 ''' matches = re.findall(r'订单号: (\d+), 日期: (\d{4}-\d{2}-\d{2})', text) for match in matches: print(match)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#文本替换 sub

使用 re.sub 函数从字符串中搜索匹配指定正则表达式的子串,然后将其替换为别的文本。

例如将密码替换为 ****** 进行隐藏:

import re text = "用户名:user 密码:123456" hidden = re.sub(r'\d{6}', '******', text) print(hidden)

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#文本分割 split

使用 re.split 函数从字符串中搜索匹配指定正则表达式的子串,然后根据这些子串的位置将字符串进行分割。

例如:

import re data = "苹果 ,香蕉, 橙子 , 葡萄" fruits = re.split(r'\s*,\s*', data) # 按逗号分割,允许逗号前后有空格 print(fruits) # 输出: ['苹果', '香蕉', '橙子', '葡萄']

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

#编译正则表达式 compile

使用 re.split 函数编译正则表达式,编译后可以重复使用,效率更高。

例如:

import re # 验证电子邮件格式 email_pattern = re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$') if email_pattern.match("[email protected]"): print("有效邮箱")

>>> Establishing WebAssembly Runtime.

>>> Standby.

Powered by Shift.

创建于 2025/5/13

更新于 2025/6/8