Python正则匹配 -> 基本规则

来源:互联网 发布:网络新媒体是什么 编辑:程序博客网 时间:2024/06/08 12:57

1. 字符集合设定符:[ ]

 [abc123],表明字符’a’ ‘b’ ‘c’ ‘1’ ‘2’ ‘3’都符合它的要求,可以被匹配

 [a-zA-Z],表明所有英文字母的大小写

 [^a-zA-Z],‘^’在开头表示取非,表明不匹配所有英文字母

[a-z^A-Z],‘^’不在开头,表示其本身,表明匹配所有英文字母和字符‘^’


2. 或规则:|

将两个规则并列起来,以‘|’连接,表示只要满足其中之一就可以匹配

‘|’在[ ]中,表示其本身

‘|’的有效范围是它两边的整条规则,比如‘dog|cat’匹配的是‘dog’’cat’,而不是’g’’c’


3. 无捕获组:(?:)

当你要将一部分规则作为一个整体对它进行某些操作,需要将这部分规则用’(?:’ ‘)’把它包围起来

>>> s = ‘I have a dog , I have a cat’

>>> re.findall( r’I have a (?:dog|cat)’ , s )

['I have a dog', 'I have a cat'] 


>>> re.findall( r’I have a dog|cat’ , s )

['I have a dog', 'cat']


>>> s=’ababab abbabb aabaab’

>>> re.findall( r’\b(?:ab)+\b’ , s )

['ababab']


>>> re.findall( r’\b(ab)+\b’ , s )

['ab']


4. 匹配所有字符:.

匹配除换行符’\n’外的所有字符,如果使用了’S’选项,匹配包括’\n’的所有字符

>>> s=’123\n456\n789’

 >>> findall(r‘.+’, s)

  ['123', '456', '789']


>>> re.findall(r‘.+’ , s , re.S)

  ['123\n456\n789']


5. 匹配字符串的开头和结尾:^ , $

多行模式下,它们可以匹配每一行的行首和行尾


6. 匹配数字:\d,等价于[0-9]


7. 匹配非数字:\D,等价于[^0-9]


8. 匹配字母和数字:\w,等价于[a-zA-Z0-9]


9. 匹配非英文字母和数字:\W,等价于[^a-zA-Z0-9]


10. 匹配间隔符:\s匹配空格符、制表符、回车符等表示分隔意义的字符,等价于[ \t\r\n\f\v]


11. 匹配非间隔符:\S,等价于[^ \t\r\n\f\v]


12. 匹配字符串开头:\A

它和’^’的区别是,’\A’只匹配整个字符串的开头,即使在’M’模式下,它也不会匹配其它行的行首

>>> s= '12 34\n56 78\n90'

>>> re.findall( r'^\d+' , s , re.M )          #匹配位于行首的数字

['12', '56', '90']

>>> re.findall( r’\A\d+’, s , re.M )        #匹配位于字符串开头的数字

['12']


13. 匹配字符串结尾:\Z

它和’$’的区别是,’\Z’只匹配整个字符串的结尾,即使在’M’模式下,它也不会匹配其它各行的行尾

>>> re.findall( r'\d+$' , s , re.M )          #匹配位于行尾的数字

['34', '78', '90']

>>> re.findall( r’\d+\Z’ , s , re.M )        #匹配位于字符串尾的数字

['90']


14. 匹配单词边界:\b

它匹配一个单词的边界,比如空格等,不过它是一个‘0’长度字符,它匹配完的字符串不会包括那个分界的字符,而如果用’\s’来匹配的话,则匹配出的字符串中会包含那个分界符

>>> s =  'abc abcde bc bcd'

>>> re.findall( r’\bbc\b’ , s )         #匹配一个单独的单词 ‘bc’ ,而当它是其它单词的一部分的时候不匹配

['bc']                                           #只找到了那个单独的’bc’

>>> re.findall( r’\sbc\s’ , s )          #匹配一个单独的单词 ‘bc’ 

[' bc ']                                         #只找到那个单独的’bc’,不过注意前后有两个空格,可能有点看不清楚


15. 匹配非边界:\B


16. 重复

0或多次匹配:*

1或多次匹配:+

0或1次匹配:?

精确匹配m次:{m}

匹配最少m次,最多n次:{m,n}


参考链接:http://blog.csdn.net/smilelance/article/details/6529950
 


0 0