python正则表达式找不到_python 正则表达式

一、正则表达式

元字符

\d

digit,数字(等效:[0-9])

\d+

匹配连续的数字

\D

非数字

\D{3}

匹配连续的非数字

\w

word,单词([A-Z0-9a-z_])

\w{6}

6个单词字符

\W

非单词(单词是指标识符)

\W{3}

3个非单词字符

\s

space,空白字符([\t\r\n])

\s{2}

2个空白字符

\S

非空白字符

\S{3}

3个非空白字符

通配

.

除开换行的任意字符

.{3}

3个任意字符(换行除外)

量词

?

有一个或没有(0、1)

\d?

最多匹配一个数字

*

任意个数(0、1、2、3….)

\d*

匹配任意个数的数字

+

至少一个(1、2、3、4…)

[a-z]+

匹配一个以上的字母

数量

{m}

m个(x==m个)

\d{3}

精确匹配3个数字

{m,n}

m到n个(m<=x<=n个)

\d{3,5}

匹配3到5个数字

{m,}

至少m个(x>=m个)

\d{3,}

匹配3个到以上的数字

集合中任意一个

[set]

set可以是单个字符,也可以是范围

[\da-f]

十六进制中单个字符

不在集合中任意一个

[^set]

通上,set前有一个^,表示在所有字符中取set集合的补集

[^3-6]

3到6之外的字符

简单分组

()

括号用于将规则包起来,成为一组,不可拆分的规则不用括号包起来

(\.\d+)

.和紧接着的数字

边界

\b

能组成标识符的字符和不能组成标识符的字符之间

\b\d+

匹配非\w字符紧接着多个数字

|

多组规则,任意一组满足

\d{3}|[a-z]{5}

匹配3个数字或5个字母

注意:匹配N个,只连续出现N次。

二、Python中使用正则表达式

常用方法:

方法返回值类型作用

re.match(pattern, string, flags=0)  正则匹配对象、None  从头匹配

re.search(pattern, string, flags=0)  正则匹配对象、None  匹配

re.compile(pattern, flags=0)  正则模式对象、None  编译正则

re.findall(pattern, string, flags=0)  列表  查找所有匹配

re.sub(pattern, repl, string, count=0, flags=0)  字符串  字符串替换

re.split(pattern, string, maxsplit=0, flags=0)  列表  字符串分割

re.finditer(pattern, string, flags=0)  可迭代对象  获取多次匹配

匹配模式(标志):

re.I:Ignore Case,全称 re.IGNORECASE,忽略字母大小写。

补充:

正则匹配对象的方法中,groups()方法,可以得到匹配到的所有组,是元组类型。

re.search()方法,只有匹配到一个以后,就不再继续查找了。

re.compile()编译得到的结果是一个正则模式对象,可以调用查找、匹配等方法,但是不需要再传递模式(pattern)参数。

re.findall()返回的数据与模式有关,如果模式中没有组,会返回所有找到的完整匹配,如果模式中有组,只会返回匹配到的组内容。无论是否匹配到了数据,都会返回一个列表。

re.findall()返回值演示

importre

found1= re.findall(r'\d{2}\D', 'addafd3434daf3434adf')print(found1)#['34d', '34a']

found2= re.findall(r'(\d{2})\D', 'addafd3434daf3434adf')print(found2)#['34', '34']

found3= re.findall(r'((\d){2})\D', 'addafd3434daf3434adf')print(found3)#[('34', '4'), ('34', '4')]

re.finditer()返回一个可迭代对象,可迭代对象每一次迭代返回的的是一个正则匹配对象。不管能不能匹配到数据,都会返回一个可迭代对象。

re.finditer()使用示例:

# 示例一

importre

pattern= r'((\d+)\.(\d{2}))\D'data= 'piis3.1415,rmb have 2.50,one apple need 3.25 yuan'it=re.finditer(pattern, data)for i inre.finditer(pattern, data):print(i, i.groups())

# 示例二

importre

pattern= r'(\d{2})\.(\1)\2'data= '12.34dsafafad22.22,ad23.2323fd33.33,44.45'

for i inre.finditer(pattern, data):print(i, '\t', i.groups())

其他示例代码:

re.sub(r'灌水|水军|扯淡', '***', '一大批水军在这里扯淡、整天灌水。')

re.sub(r'(\d+)[a-z]+', r'(\1)', 'he234He, Hh66aabbcc')importre

data= 'pi is 3.1415, I have a DREAM, Learning Python'repl= '-*-'split_result= repl.join(re.split(r'[a-z]+', data))

sub_result= re.sub(r'[a-z]+', repl, data)print(split_result)print(sub_result)print(split_result == sub_result)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值