正则表达式

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 模块的常见用法,并将其应用于实际编程中。


posted @ 2025-03-01 18:07  kyle_7Qc  阅读(23)  评论(0)    收藏  举报