正则表达式
1. 正则表达式
1.1 元字符
-
具有特殊意义的专用字符
- 例如:"^"和"$" 分别表示开始与结束
1.2 限定符
-
用于限定匹配的字数
1.3 其他字符
2. re模块
-
python中的内置模块,用于实现python中的正则表达式操作
3. 应用
3.1. re.match
:从字符串开头开始匹配
re.match
函数用于从字符串的开头开始匹配模式。如果匹配成功,返回一个 Match
对象;否则返回 None
。
示例 1:匹配数字
import re # 导入模块
pattern = r'\d+.\d+' # 匹配形如 "3.11" 的数字
s = "I study Python 3.11 every day" # 待匹配字符串
match = re.match(pattern, s, re.I) # 从字符串开头开始匹配
print(match) # 输出:None,因为字符串开头不是数字
s2 = "3.11 Python I study every day"
match2 = re.match(pattern, s2, re.I)
print(match2) # 输出:<re.Match object; span=(0, 4), match='3.11'>
print('起始位置:', match2.start()) # 起始位置:0
print('结束位置:', match2.end()) # 结束位置:4
print('匹配区间的位置元素:', match2.span()) # 匹配区间的位置元素:(0, 4)
print('待匹配的字符串:', match2.string) # 待匹配的字符串:3.11 Python I study every day
print('匹配的数据:', match2.group()) # 匹配的数据:3.11
示例 2:匹配手机号码
import re # 导入模块
pattern = r'13[4-9]\d{8}' # 匹配以 13 开头,第三位是 4 到 9 之间的数字,后面跟着任意 8 个数字的字符串
lst = ['13809876543', '145025886248', '132345678965']
for i in lst:
match = re.match(pattern, i)
if match:
print(match, match.group()) # 输出匹配结果
运行结果:
<re.Match object; span=(0, 11), match='13809876543'> 13809876543
3.2. re.search
:在整个字符串中搜索第一个匹配项
re.search
函数用于在整个字符串中搜索第一个匹配项,而不仅仅是从开头开始。
示例:匹配数字
import re # 导入模块
pattern = r'\d+.\d+' # 匹配形如 "3.11" 的数字
s3 = "3.11 Python I study 3.1"
s4 = "I study Python 3.10 every day" # 待匹配字符串
s5 = "I study Python every day"
match3 = re.search(pattern, s3, re.I)
print(match3) # 输出:<re.Match object; span=(0, 4), match='3.11'>
print(match3.group()) # 输出:3.11
match4 = re.search(pattern, s4, re.I)
print(match4) # 输出:<re.Match object; span=(15, 19), match='3.10'>
print(match4.group()) # 输出:3.10
match5 = re.search(pattern, s5, re.I)
print(match5) # 输出:None,因为字符串中没有匹配项
3.3. re.findall
:查找所有匹配项
re.findall
函数用于查找字符串中所有匹配的项,并返回一个列表。
示例:查找所有数字
import re # 导入模块
pattern = r'\d+.\d+' # 匹配形如 "3.11" 的数字
s0 = "3.11 Python I study 3.1"
match0 = re.findall(pattern, s0)
print(match0) # 输出:['3.11', '3.1']
for i in match0:
print(i)
运行结果:
['3.11', '3.1']
3.11
3.1
3.4. re.sub
:替换字符串中的内容
re.sub
函数用于将字符串中符合模式的部分替换为指定的内容。
示例:替换敏感词
import re # 导入模块
pattern = r'黑客|破解|反爬' # 匹配 "黑客"、"破解" 或 "反爬"
s = "我想学习一下python,想破解一些vip视频,python可以实现无底线反爬嘛?"
new_s = re.sub(pattern, 'xxx', s)
print(new_s) # 输出:我想学习一下python,想xxx一些vip视频,python可以实现无底线xxx嘛?
3.5. re.split
:分割字符串
re.split
函数用于根据模式分割字符串,类似于字符串的 split()
方法,但更灵活。
示例:分割 URL 参数
import re # 导入模块
s1 = 'https://www.baidu.com/s?wd=billibili&rsv_spt=1 '
pattern1 = r'[?&]' # 匹配 "?" 或 "&"
new_s1 = re.split(pattern1, s1)
print(new_s1)
运行结果:
['<url id="cvdejleahlmclqfvutg0" type="url" status="failed" title="" wc="0">https://www.baidu.com/s', 'wd=billibili', 'rsv_spt=1</url>']
总结
正则表达式是处理字符串的强大工具,re
模块提供了丰富的功能,包括匹配、搜索、查找、替换和分割等。通过本文的实例,您可以快速掌握 re
模块的常见用法,并将其应用于实际编程中。