Python-re 正则 regex 简介

来源:互联网 发布:php微信答题 源码 编辑:程序博客网 时间:2024/06/18 08:30


元字符列表:

. ^ $ * + ? { } [ ] \ | ( )

匹配字符

[abc] 匹配 a b c

[a-c] 匹配a b c

[a-z] 匹配小写

$元字符在[]中,就不是元字符了,比如 [abm$] 就是匹配 a b m $

[^5] 匹配任何5以外的字符 除了5哦

转义 \  : \\ \[  

特殊的转义字符:

\d                               [0-9]   数字

\D                              [^0-9]   非数字

\s                               [\t\n\r\f\v]  空白字符 

\S                              [^\t\n\r\f\v]  非空白字符

\w                             [a-zA-Z0-9]

\W                            [^a-zA-Z0-9]


[\s,.]  匹配任何字符 或,  或.


重复

*    匹配0或多个     ca*t     ct  caaaat

+   匹配1或多个     ca+t    cat   caaaaat

?   匹配0或1个      ca?t     ct    cat

[m,n]   匹配至少m次,最多n次  [0,]等同于*  [1,]等同于+   [0,1]等同于?


编译正则表达式

>>> import re>>> p = re.compile('abc*',re.IGNORECASE)>>> pre.compile('abc*', re.IGNORECASE)


‘|’    或规则

注意 :关于 ’|’ 要注意两点:

第一,            它在 ’[‘ ‘]’ 之中不再表示或,而表示他本身的字符。如果要在 ’[‘ ‘]’ 外面表示一个 ’|’ 字符,必须用反斜杠引导,即 ’/|’ ;

第二,            它的有效范围是它两边的整条规则,比如‘ dog|cat’ 匹配的是‘ dog’ 和 ’cat’ ,而不是 ’g’ 和 ’c’ 。如果想限定它的有效范围,必需使用一个无捕获组 ‘(?: )’ 包起来。比如要匹配 ‘ I have a dog’ 或 ’I have a cat’ ,需要写成 r’I have a (?:dog|cat)’ ,而不能写成 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', 'I have a cat']

‘/A’ 匹配字符串开头

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

‘/Z’ 匹配字符串结尾

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


‘*?’ ‘+?’ ‘??’ 最小匹配


>>> s = '/* part 1 */ code /* part 2 */'>>> re.findall(r'//*.*?/*/', s)['/* part 1 */', '/* part 2 */']


前向界定与后向界定

‘(?<=…)’ 前向界定

括号中 ’…’ 代表你希望匹配的字符串的前面应该出现的字符串。

‘(?=…)’  后向界定

括号中的 ’…’ 代表你希望匹配的字符串后面应该出现的字符串。


>>> s = '/* comment 1 */ code /* comment 2 */'>>> re.findall( r'(?<=/\*).+?(?=\*/)',s)[' comment 1 ', ' comment 2 ']









原创粉丝点击