史上最全 Python Re 模块讲解(二)

继上文

https://blog.csdn.net/weixin_42625143/article/details/95329033

正则表达式
元字符
“.” :通配符,除换行符外的任意的1个字符

pat=re.compile( . )
pat.match( abc )
<_sre.SRE_Match object at 0xb72b6170>
pat.match( abc ).group()
a                                 #匹配到了首个字符
pat.search( abc ).group()
a
pat.match( ).group()        #换行符匹配出错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: NoneType object has no attribute group

“” : 转义符

pat=re.compile( . )
pat.search( abc.efg ).group()  #匹配到.
.
pat.findall( abc.efg )         #不用group,返回列表
[ . ]

“[…]” : 字符集合,匹配里面的任意一个元素

>>> pat=re.compile( [abc] )
>>> pat.match( axbycz ).group()
a
>>> pat.search( axbycz ).group()
a
>>> pat.findall( axbycz )
[ a , b , c ]

“d” : 数字

>>> pat=re.compile( d )          
>>> pat.search( ax1by2cz3 ).group()   #匹配到第一个数字:1,返回
1
 
>>> pat.match( ax1by2cz3 ).group()    #匹配不到(首个不是)返回None,报错,match匹配字符串头
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: NoneType object has no attribute group
 
>>> pat.findall( ax1by2cz3 )          #匹配所有的数字,列表返回
[ 1 , 2 , 3 ]

“D” : 非数字

>>> pat=re.compile( D )
>>> pat.match( ax1by2cz3 ).group()
a
>>> pat.search( ax1by2cz3 ).group()
a
>>> pat.findall( ax1by2cz3 )
[ a , x , b , y , c , z ]

“s” :空白字符 、 、

、空格

>>> pat=re.compile( s )
>>> pat.findall( ax1 by2 cz3 )
[ ,   , ,   , ]
>>> pat.search( ax1 by2 cz3 ).group()

>>> pat.match( ax1 by2 cz3 ).group()

“S” :非空白字符

>>> pat=re.compile( S )
>>> pat.search( ax1 by2 cz3 ).group()
a
>>> pat.findall( ax1 by2 cz3 )
[ a , x , 1 , b , y , 2 , c , z , 3 ]

“w” :单个的 数字和字母,[A-Za-z0-9]

>>> pat=re.compile( w )
>>> pat.search( 1a2b3c ).group()
1
>>> pat.findall( 1a2b3c )
[ 1 , a , 2 , b , 3 , c ]
>>> pat.match( 1a2b3c ).group()
1

“W”:非单词字符,除数字和字母外

>>> pat=re.compile( W )
>>> pat.findall( 1a2我b3c ) #python是用三字节表示一个汉字
[ æ , ˆ ,]
>>> pat.search( 1a2我b3c ).group()
æ

数量词
“*” :0次或多次
( 乘0会变成0)

>>> pat = re.compile( [abc]* )
>>> pat.match( abcabcdefabc ).group()
abcabc                               #2次
>>> pat.search( abcabcdefabc ).group()
abcabc                               #2次
>>> pat.findall( abcabcdefabc )
[ abcabc ,  ,  ,  , abc ,  ]     #2次和1次,因为有0次,所以匹配了  

“+” :1次或多次
“+” :1次或多次

>>> pat = re.compile( [abc]+ )
>>> pat.match( abcdefabcabc ).group()
abc
>>> pat.search( abcdefabcabc ).group()
abc
>>> pat.findall( abcdefabcabc )
[ abc , abcabc ]

“?” :0次或1次,match,search 不会出现none,会出现’ ‘ (因为0次也是符合的)
0次或1次不是指[xxx]这个集合,而是其中的任何的一个字符

>>> pat = re.compile( [abc]? )
>>> pat.match( defabc ).group()     #0次
 
>>> pat.match( abcdefabc ).group()
a
>>> pat.search( defabc ).group()    #0次
 
>>> pat.findall( defabc )           #0次和1次
[  ,  ,  , a , b , c ,  ]     #后面总再加个  

“数量词?” :非贪婪模式:只匹配最少的(尽可能少);默认贪婪模式:匹配最多的(尽可能多)

>>> pat = re.compile( [abc]+ )         #贪婪模式
>>> pat.match( abcdefabcabc ).group()  #匹配尽可能多的:abc
abc
>>> pat.match( bbabcdefabcabc ).group()
bbabc
>>> pat.search( dbbabcdefabcabc ).group()
bbabc
>>> pat.findall( abcdefabcabc )
[ abc , abcabc ]
 
>>> pat = re.compile( [abc]+? )        #非贪婪模式:+?
>>> pat.match( abcdefabcabc ).group()  #匹配尽可能少的:a、b、c
a
>>> pat.search( dbbabcdefabcabc ).group()
b
>>> pat.findall( abcdefabcabc )
[ a , b , c , a , b , c , a , b , c ]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值