继上文
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 ]