正则表达式就是记录文本规则的代码,我们将从正则表达式基础和re模块实现两个方面来说
1.正则表达式基础
正则表达式主要学习元字符,可以参考百度进行:https://baike.sogou.com/v107588.htm?fromTitle=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
2.使用Python的re模块实现
Python提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法,如search(),match(),findall()进行字符串处理,也可以使用re模块的compile()方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。
2.1 使用match()方法进行匹配
match()方法用于从字符串的开始处进行匹配,如果再开始处匹配成功,则返回Match对象,否则返回None
import re
pattern = r"mr_\w+"
string = "MR_shop mr_shop"
match = re.match(pattern, string, re.I)
print(match)
string = "1234"
match = re.match(pattern, string, re.I)
print(match)
返回结果分别为
<re.Match object; span=(0, 7), match='MR_shop'>
None
同时,如果返回match类,还有以下几个参数可以调用
- match.start() :匹配值的起始位置
- match.end() :匹配值的结束位置
- match.span():匹配值的位置元组
- match.string():要匹配的字符串
- match.group():匹配的数据
2.2 使用search()方法进行匹配
search()方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功返回Match对象。该方法的调用同match对象。
import re
pattern = r"mr_\w+"
string1 = "MR_shop mr_shop"
match1 = re.search(pattern, string1, re.I)
print(match1)
string2 = "你好MR_shop mr_shop"
match2 = re.search(pattern, string2, re.I)
print(match2)
【Running】=================
<re.Match object; span=(0, 7), match='MR_shop'>
<re.Match object; span=(2, 9), match='MR_shop'>
2.3 使用findall() 方法进行匹配
findall() 方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回(返回不同于前两种方法)。语法格式与上两个基本相似
import re
pattern = r"mr_\w+"
string1 = "MR_shop mr_shop"
match1 = re.findall(pattern, string1, re.I)
print(match1)
string2 = "你好MR_shop mr_shop"
match2 = re.findall(pattern, string2, re.I)
print(match2)
【Running】
['MR_shop', 'mr_shop']
['MR_shop', 'mr_shop']
2.4 替换字符串
sub()字符串用于实现字符串替换
re.sub(pattern, repl, string, count, flags)
- pattern:表示模式字符串
- repl:表示替换的字符串
- string:表示呗查找替换的原始字符串
- count:匹配次数,默认值为0,表示替换全部
- flags:可选参数,用于控制匹配方式,如是否区分大小写
import re
pattern = r'1[345678]\d{9}'
string = '姓名:123 电话:13365656565'
result = re.sub(pattern, '1XXXXXXXXXX', string)
print(result)
运行结果:姓名:123 电话:1XXXXXXXXXX
2.5 分割字符串
re.split(pattern, string, [maxsplit], [flags])
- pattern:表示模式字符串
- string:要匹配的字符串
- maxsplit:表示最大拆分次数,可选
- flags:标志位,如是否区分大小写。
import re
pattern = r'[?|&]'
string = 'niafeibuvos&boiabfabv?vewivbow&nbivoosb'
result = re.split(pattern, string)
print(result)
运行结果为:[‘niafeibuvos’, ‘boiabfabv’, ‘vewivbow’, ‘nbivoosb’]