字符匹配
一般字符
一般字符 | 含义 |
---|---|
. | 匹配任意单个字符, a.b 可以的匹配结果为 abc、 aic、 a&c 等, 但不包括换行符 |
\ | 转义字符,把字符改变为原来的意思 |
[…] | 字符集,相当于在中括号中任选一个。例如 a[bcd],匹配的结果为ab、 ac 和 ad |
() | 表示括号的内容作为返回结果 |
预定义字符
预定义字符 | 含义 |
---|---|
\d | 匹配一个数字字符。等价于[0-9] |
\D | 匹配一个非数字字符。等价于[^0-9] |
\s | 匹配任何空白字符,包括空格、制表符、换页符等。 等价于 [ \f\n\r\t\v] |
\S | 匹配任何非空白字符。等价于[^\f\n\r\t\v] |
\w | 匹配包括下画线的任何单词字符。等价子[A-Za-z0-9_] |
\W | 匹配任何非单词字符。等价子[^A-Za-z0-9_] |
数量词
数量词 | 含义 |
---|---|
* | 匹配前一个字符0或无限次,例:ab*c匹配,ac,abc,abbc等. |
+ | 匹配前一个字符l或无限次,例:ab+c匹配abc,abbc等. |
? | 匹配前一个字符0或1次,例,ab?c匹配,ac,abc. |
{m} | 匹配前一个字符m次,例,ab{2}c匹配abbc. |
{m,n} | 匹配前一个字符m至n次,例,ab{2,3}c匹配abbc,abbbc. |
边界匹配
边界匹配 | 含义 |
---|---|
^ | 匹配字符串的开头,例:^abc 匹配 abc 开头的字符串. |
$ | 匹配字符串的结尾,例:abc$匹配 abc 结尾的字符串。 |
\A | 仅匹配字符串的开头 |
\Z | 仅匹配字符串的结尾 |
re模块
函数
search()
re.search(pattern, string, flags=0)
匹配并提取第一个符合规律的内容,返回一个正则表达式对象。
- pattern : 正则中的模式字符串。
- string : 要被查找替换的原始字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
例:
import re
s='abc1d2e3f4gh'
info=re.search('\d+',s) # 返回正则表达式对象
print(info)
print(info.group()) # group方法获取信息
执行结果:
<re.Match object; span=(3, 4), match='1'>
1
sub()
re.sub(pattern, repl, string, count=0, flags=0)
数用于替换字符串中的匹配项。
- pattern为匹配的正则表达式
- repl 为替换的字符串。
- string 为要被查找替换的原始字符串。
- counts 为模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
- flags 为标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等.
例:去掉数字
import re
s='abc1d2e3f4gh'
info=re.sub('\d','',s)
print(info)
执行结果:
abcdefgh
findall()
函数匹配所有符合规律的内容,并以列表的形式返回结果。
例:
import re
s='abc1d2e3f4gh'
info=re.findall('\d',s)
print(info)
执行结果:
['1', '2', '3', '4']
re模块修饰符
修饰符 | 描述 |
---|---|
re.l | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响^和$ |
re.S | 使匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响\w, \W, \b,\B |
re.X | 该标志通过给予更灵活的格式,以便将正则表达式写得更易理解 |
例:若不用re.S
import re
s='''abcd
2e3fgh'''
info=re.findall('abcd(.*?)fgh',s)
print(info)
执行结果:
[]
加上re.S
import re
s='''abcd
2e3fgh'''
info=re.findall('abcd(.*?)fgh',s)
print(info)
执行结果:
['\n2e3']
- 贪心算法
尽可能长的匹配字符
例:
import re
s='xxlxxjshxxlovexxsffaxxpythonxx'
info=re.findall('xx(.*)xx',s)
print(info)
执行结果:
['lxxjshxxlovexxsffaxxpython']
- 非贪心(添加?)
import re
s='xxlxxjshxxlovexxsffaxxpythonxx'
info=re.findall('xx(.*?)xx',s)
print(info)
执行结果
['l', 'love', 'python']