python3 正则表达式

字符匹配

一般字符

一般字符含义
.匹配任意单个字符, 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']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值