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'>
未完待续