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

时间:2024-10-09 11:22:48

re模块下的函数

compile(pattern):创建模式对象

    import re
    pat=re.compile( A )
    m=pat.search( CBA )                    #等价于 ( A , CBA )
    print m
    <_sre.SRE_Match object at 0x9d690c8>   #匹配到了,返回MatchObject(True)
    m=pat.search( CBD )
    print m
    none  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

search(pattern,string):在字符串中寻找模式

m = re.search( asd , ASDasd )
 print m
 <_sre.SRE_Match object at 0xb72cd6e8>  #匹配到了,返回MatchObject(True)
 m = re.search( asd , ASDASD )
 print m
 None                                   #没有匹配到,返回None(False)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

match(pattern,string):在字符串开始处匹配模式

m = re.search( asd , ASDasd )
print m
<_sre.SRE_Match object at 0xb72cd6e8>  #匹配到了,返回MatchObject(True)

m = re.search( asd , ASDASD )
print m
None                                   #没有匹配到,返回None(False)

# 等价于
pat=re.compile( a )
print pat.match( Aasd )
None

printpat.match( aASD )
<_sre.SRE_Match object at 0xb72cd6e8>

# 上面的函数返回都可以在if条件语句中进行判断:

if pat.search( asd ):
     print OK

OK        #找到返回
if re.search( a , ASD ):
     print "OK"
       #没有找到
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

split(pattern,string):根据模式分割字符串,返回列表

re.split( , , a,s,d,asd )
[ a , s , d , asd ]          #返回列表

pat = re.compile( , )
pat.split( a,s,d,asd )
[ a , s , d , asd ]          #返回列表

re.split( [, ]+ , a ,  s  ,d     ,,,,,asd )   #正则匹配:[, ]+,后面说明
[ a , s , d , asd ]

re.split( [, ]+ , a ,  s  ,d     ,,,,,asd ,maxsplit=2) # maxsplit 最多分割次数
[ a , s , d     ,,,,,asd ]

pat = re.compile( [, ]+ )                     #正则匹配:[, ]+,后面说明
pat.split( a ,  s  ,d     ,,,,,asd ,maxsplit=2)        # maxsplit 最多分割次数
[ a , s , d     ,,,,,asd ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

findall(pattern,string):列表形式返回匹配项

re.findall( a , ASDaDFGAa )
[ a , a ]                           #列表形式返回匹配到的字符串
 
pat = re.compile( a )
pat.findall( ASDaDFGAa )
[ a , a ]                           #列表形式返回匹配到的字符串
 
pat = re.compile( [A-Z]+ )       #正则匹配:[A-Z]+  后面有说明
pat.findall( ASDcDFGAa )
[ ASD , DFGA ]                      #找到匹配到的字符串
 
pat = re.compile( [A-Z] )
pat.findall( ASDcDFGAa )         #正则匹配:[A-Z]+  后面有说明
[ A , S , D , D , F , G , A ]  #找到匹配到的字符串
 
pat = re.compile( [A-Za-z] )     #正则匹配:[A-Za-z]+  匹配所有单词,后面有说明
pat.findall( ASDcDFGAa )
[ A , S , D , c , D , F , G , A , a ]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

sub(pat,repl,string) :用repl替换 pat匹配项
(留的是中间的,因为中间在中心)

re.sub( a , A , abcasd )   #找到a用A替换,后面见和group的配合使用
AbcAsd
 
pat = re.compile( a )
pat.sub( A , abcasd )
AbcAsd
 
pat=re.compile(r www.(.*)..{3} ) #正则表达式

  #在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转译反斜杠    。
  #例如, 在raw string中,是两个字符,和n, 而不会转译为换行符。
  #由于正则表达式和  会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上 r 。
    
   #与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。
   #假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":
   #前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
   #Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。
   #同样,匹配一个数字的"\d"可以写成r"d"。
   #有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
  
   #不是说 加了r 就没有转译功能,好乱,就直接记住1句话:
   #当一个字符串使用了正则表达式后,最好在前面加上 r ,这样你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观

pat.match( www.dxy.com ).group(1)
dxy
 
re.sub(r www.(.*)..{3} ,r  , hello,www.dxy.com )
 
pat.sub(r  , hello,www.dxy.com )
hello,dxy
# r 1  是第一组的意思
#通过正则匹配找到符合规则的"" ,取得 组1字符串 去替换 整个匹配。
 
 
pat=re.compile(r (w+) (w+) )     #正则表达式
s= hello world ! hello hz !
 
pat.findall( hello world ! hello hz ! )
[( hello , world ), ( hello , hz )]
pat.sub(r   ,s)                #通过正则得到组1(hello),组2(world),再通过sub去替换。即组1替换组2,组2替换组1,调换位置。  
world hello!hz hello!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

escape(string) :对字符串里面的特殊字符串进行转义

re.escape( www.dxy.cn )
www\.dxy\.cn                    #转义
  • 1
  • 2

上面的函数中,只有match、search有group方法,其他的函数没有。

函数的方法

group:获取子模式(组)的匹配项

---------------------------------------------------------------
注:我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:895817687
---------------------------------------------------------------

pat = re.compile(r www.(.*).(.*) )       #用()表示1个组,2个组
m = pat.match( www.dxy.com )
m.group()                                  #默认为0,表示匹配整个字符串  
www.dxy.com
 
m.group(1)                                 #返回给定组1匹配的子字符串
dxy
 
m.group(2)
com
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

start:给定组匹配项的开始位置

m.start(2)                                 #组2开始的索引
8
```python
**<font color='green'>end:给定组匹配项的结束位置**

  • 1
  • 2
  • 3
  • 4
  • 5

(2) #组2结束的索引
11

**<font color='green'>span:给定组匹配项的开始结束位置**

  • 1
  • 2

(2) #组2开始、结束的索引
(8, 11)


未完待续

  • 1
  • 2
  • 3