python 正则 replace python正则表达式标准库之re库的详细介
目录
- 1. 模块概述
- 2. 核心概念
- ?(1) 正则表达式语法
- ?(2) 修饰符(Flags)?
- ?3. 常用函数与示例
- ?(1) 匹配与搜索
- (2) 替换与分割
- (3) 预编译正则表达式
- (4) 匹配对象(Match Object)?
- 4. 高质量技巧
- ?(1) 非贪婪匹配
- (2) 命名分组
- 5. 常见难题与注意事项
- 6. 应用场景
- ?7. 拓展资料
1. 模块概述
re
是 Python 标准库中用于正则表达式操作的模块,提供字符串的复杂模式匹配、搜索、替换等功能。正则表达式(Regex)通过特定语法制度描述字符串模式,适用于文本解析、数据清洗、输入验证等场景。
2. 核心概念
?(1) 正则表达式语法
- ?普通字符:如
a
、1
直接匹配自身。 - ?独特字符:
.
:匹配任意字符(除换行符,除非启用re.DOTALL
)。^
:匹配字符串开头。$
:匹配字符串小编觉得。d
:匹配数字(等价于[0-9]
)。w
:匹配字母、数字、下划线(等价于[a-zA-Z0-9_]
)。s
:匹配空白符(空格、制表符、换行等)。[]
:字符集合(如[a-z]
匹配小写字母)。|
:逻辑或(如a|b
匹配a
或b
)。
- ?量词:
:匹配前一个字符 0 次或多次。
+
:匹配前一个字符 1 次或多次。?
:匹配前一个字符 0 次或 1 次。m}
:匹配前一个字符恰好m
次。m,n}
:匹配前一个字符m
到n
次。
- ?分组与捕获:
()
:定义捕获组(可通过索引或命名引用)。(?:)
:非捕获组(仅分组,不捕获)。
?(2) 修饰符(Flags)?
修饰符 | 描述 |
---|---|
re.IGNORECASE (或re.I ) |
忽略大致写 |
re.MULTILINE (或re.M ) |
多行模式(^ 和$ 匹配每行的开头/小编觉得) |
re.DOTALL (或re.S ) |
. 匹配包括换行符在内的所有字符 |
re.VERBOSE (或re.X ) |
允许正则表达式换行并添加注释 |
?3. 常用函数与示例
?(1) 匹配与搜索
函数 | 描述 | 示例 |
---|---|---|
re.match(pattern, string) |
?从字符串开头匹配模式,成功返回Match 对象,否则返回None 。 |
re.match(r&039;d+&039;, &039;123abc&039;) → Match 对象(匹配 &039;123&039;) |
re.search(pattern, string) |
?扫描整个字符串查找第一个匹配,成功返回Match 对象,否则返回None 。 |
re.search(r&039;d+&039;, &039;abc123def&039;) → Match 对象(匹配 &039;123&039;) |
re.findall(pattern, string) |
返回所有非重叠匹配的列表(直接返回字符串或元组列表)。 | re.findall(r&039;d+&039;, &039;a1b22c333&039;) → [&039;1&039;, &039;22&039;, &039;333&039;] |
re.finditer(pattern, string) |
返回所有匹配的迭代器,每个元素是Match 对象。 |
[m.group() for m in re.finditer(r&039;d+&039;, &039;a1b22&039;)] → [&039;1&039;, &039;22&039;] |
示例代码:
import retext = “Email: user@example.com, Phone: 123-456-7890” 提取邮箱email = re.search(r’w+@w+.w+’, text).group() ‘user@example.com’ 提取所有电话号码片段phones = re.findall(r’d3}-d3}-d4}’, text) [‘123-456-7890’]
(2) 替换与分割
函数 | 描述 | 示例 |
---|---|---|
re.sub(pattern, repl, string) |
将匹配模式的部分替换为repl ,返回新字符串。 |
re.sub(r&039;d+&039;, &039;&039;, &039;a1b22c&039;) → &039;abc&039; |
re.split(pattern, string) |
按模式分割字符串,返回列表。 | re.split(r&039;W+&039;, &039;Hello, world!&039;) → [&039;Hello&039;, &039;world&039;, &039;&039;] |
示例代码:
替换日期格式(YYYY-MM-DD → DD/MM/YYYY)date = “2023-10-05″new_date = re.sub(r'(d4})-(d2})-(d2})’, r’3/2/1′, date) ’05/10/2023′ 分割复杂文本text = “apple,,banana;;cherry”parts = re.split(r'[,;]+’, text) [‘apple’, ‘banana’, ‘cherry’]
(3) 预编译正则表达式
使用re.compile()
预编译正则表达式以进步效率(尤其需多次使用同一模式时):
pattern = re.compile(r’d+’)match = pattern.match(‘123abc’) 等效于 re.match(r’d+’, ‘123abc’)
(4) 匹配对象(Match Object)?
成功匹配后返回的Match
对象提供下面内容技巧:
技巧 | 描述 |
---|---|
group(n) |
返回第n 个分组(默认n=0 表示整个匹配)。 |
groups() |
返回所有分组的元组。 |
start() /end() |
返回匹配的起始/结束索引。 |
span() |
返回匹配的索引范围元组(start, end) 。 |
示例:
text = “Date: 2023-10-05″match = re.search(r'(d4})-(d2})-(d2})’, text)if match: print(match.group(0)) ‘2023-10-05’ print(match.group(1)) ‘2023’ print(match.groups()) (‘2023′, ’10’, ’05’) print(match.span(1)) (6, 10)
4. 高质量技巧
?(1) 非贪婪匹配
默认量词(如,
+
)是贪婪的(尽可能多匹配),添加?
可改为非贪婪模式:
贪婪匹配re.findall(r'<.>’, ‘<div>text</div>’) [‘<div>text</div>’] 非贪婪匹配re.findall(r'<.?>’, ‘<div>text</div>’) [‘<div>’, ‘</div>’]
(2) 命名分组
使用(?P<name>...)
定义命名分组,通过group(&039;name&039;)
访问:
text = “ID: 123, Name: Alice”match = re.search(r’ID: (?P<id>d+), Name: (?P<name>w+)’, text)print(match.group(‘id’)) ‘123’print(match.group(‘name’)) ‘Alice’
5. 常见难题与注意事项
-
转义字符:在正则表达式中使用
需写成
\
,或使用原始字符串r&039;&039;
简化:python
re.match(r’d+’, ‘123’) 正确(原始字符串)re.match(‘\d+’, ‘123’) 正确(常规字符串需转义)
-
性能优化:
- 多次使用同一模式时,预编译正则表达式(
re.compile()
)。 - 避免过度复杂的正则表达式(如深层嵌套量词)。
- 多次使用同一模式时,预编译正则表达式(
-
匹配失败处理:检查
Match
对象是否为None
避免异常:python
match = re.search(r’d+’, ‘abc’)if match: print(match.group())
6. 应用场景
- ?数据提取:从日志、HTML、JSON 中提取特定字段。
- ?输入验证:检查邮箱、电话、密码格式是否合法。
- ?文本清洗:替换敏感词、标准化日期格式。
- ?复杂搜索:查找符合特定模式的字符串片段。
?7. 拓展资料
- ?核心功能:
re
模块通过正则表达式实现高效的字符串模式操作。 - ?常用函数:
match()
、search()
、findall()
、sub()
、split()
。 - ?匹配对象:利用
group()
、groups()
提取分组内容。 - ?高质量特性:非贪婪匹配、命名分组、预编译优化。
到此这篇关于python正则表达式标准库之re库的文章就介绍到这了,更多相关pythonre库介绍内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
无论兄弟们可能感兴趣的文章:
- Python正则表达式和re库聪明点拓展资料
- python re库的正则表达式入门进修教程
- Python标准库re的使用举例(正则化匹配)
- python正则爬取某段子网站前20页段子(request库)经过解析
- python正则表达中的re库常用技巧拓展资料