Python: 正则表达式

1.了解正则表达式

正则表达式是对字符串操作的一种逻辑公式,是用来匹配字符串的非常强大的工具,利用正则表达式来提取想要的内容。

正则表达式的大致匹配过程如下

1)依次拿出表达式和文本中的字符比较

2)如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

3)如果表达式中有量词或边界,这个过程会稍微有些不同。

2.正则表达式的语法规则

1)  . 匹配任意字符

eg:

>>>m=re.match(r'a.','a99')

>>>m

<-sre.SRE_Match object;span=(0,2),match='a9'>

2)  ^ 匹配字符串开头 

eg:

>>>m=re.match(r'^a','a99')

>>>m

<-sre.SRE_Match object;span=(0,1),match='a'>

3)  $ 匹配字符串结尾

eg:

>>>m=re.match(r'.*?a$','a99a')

>>>m

<-sre.SRE_Match object;span=(0,4),match='a99a'>

4)  | 逻辑或操作符

eg:

>>>m=re.match(r'a|A','A99')

>>>m

<-sre.SRE_Match object;span=(0,1),match='A'>

 

5)  [] 匹配内部的任一字符或者子表达式

eg1:

>>>m=re.match(r'[a-z]+','dgfjjghhj')

>>>m

<-sre.SRE_Match object;span=(0,9),match='dgfjjghhj'>

eg2:

>>>m=re.match(r'[a-z]','dgfjjghhj')

>>>m

<-sre.SRE_Match object;span=(0,9),match='d'>

 

6)  [^] 对字符集合取非

eg:

>>>m=re.match(r'[^a-zA-Z0-9]+','@dgfjjghhj')

>>>m

<-sre.SRE_Match object;span=(0,1),match='@'>

 

7)  - 定义一个区间

eg:

>>>m=re.match(r'[^a-zA-Z0-9]+','@dgfjjghhj')

>>>m

<-sre.SRE_Match object;span=(0,1),match='@'>

 

8)   对下一字符取非(通常是普通变特殊,特殊变普通)

eg:

>>>m=re.match(r'\','\abc')

>>>m

<-sre.SRE_Match object;span=(0,1),match='\'>

 

9)  * 匹配前面的字符或者子表达式0次或者多次

eg:

>>>m=re.match(r'[a-zA-Z0-9]+','dgfjjghhj')

>>>m

<-sre.SRE_Match object;span=(0,9),match='dgfjjghhj'>

 

10)  ? 匹配前面的字符或者子表达式0次或者1次

eg:

>>>m=re.match(r'a?','dgfjjghhj')

>>>m

<-sre.SRE_Match object;span=(0,0),match=''>

字符串里没有a也能匹配的上

11)  *? 惰性匹配上一个

匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。

>>>m=re.match(r'a*?','aa')

>>>m

<-sre.SRE_Match object;span=(0,0),match=''>

这是我在py 解释器里结果,我不知道什么原因一次都没匹配,如果谁知道,请留评论,谢谢

 

12)  +? 惰性匹配上一个

eg1:

>>>m=re.match(r'a+?','aaa')

>>>m

<-sre.SRE_Match object;span=(0,1),match='a'>

匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。

eg2:

>>>m=re.match(r'a+','aaa')

>>>m

<-sre.SRE_Match object;span=(0,3),match='aaa'>

 13)  + 匹配上一个字符或者子表达式一次或者多次

eg1:

>>>m=re.match(r'a+','aaa')

>>>m

<-sre.SRE_Match object;span=(0,3),match='aaa'>

eg1:

>>>m=re.match(r'a','aaa')

>>>m

<-sre.SRE_Match object;span=(0,1),match='a'>

 

 

未完待续

 

原文地址:https://www.cnblogs.com/baxianhua/p/8329615.html