Python的正则表达式
- 常见字符:
-
literal 直接匹配字符串literal 比如:foo*
-
re1|re2 匹配正则表达式re1或者re2 比如: foo|bar
-
. 匹配任何字符(除了\n之外) 比如: a.c
-
^ 匹配字符串起始部分 比如:^Hello
-
$ 匹配字符串终止部分 比如:/bin/*sh$
-
(星号)* 匹配0次或者多次前面出现的正则表达式 比如:[0-9a-zA-Z]*
-
(加号)+ 匹配1次或者多次前面出现的正则表达式 比如:[a-z]+\.com
-
? 匹配0次或者1次前面出现的正则表达式 比如:goo?
-
{N} 匹配N次前面出现的正则表达式 比如:[0-9]{2}
-
{M,N} 匹配M~N次前面出现的正则表达式 比如:[0-9]{3-5}
-
[...] 匹配字符串中的任意一个字符 比如:[aeiou]
-
[..x-y..] 匹配x~y方位中的任意一个字符 比如:[0-9],[A-Za-z]
-
[^...] 不匹配字符串中的任意一个字符,或者某个范围内的字符。 比如:[^aeiou],[^A-Za-z0-9]
-
(*|+|?|{})? 匹配上面频繁出现/重复出现的符号的非贪婪版本( * 、+、?、{}) 比如:.*?[a-z]
-
(...) 匹配封闭的正则表达式,然后另存为子组 比如:([0-9]{3})?,f(oo|u)bar
- 特殊字符:
-
\d 匹配任何十进制数字,与[0-9]表达的一样。(\D与\d相反,\D表示匹配任何非数值型的数字 比如:date\d+.txt
-
\w 匹配任何的字母数字字符 ,与[A-Za-z0-9_]相同。(与\W相反) 比如:[A-Za-z_]\w+
-
\s 匹配任何空格字符,与[\n\t\r\v\f]相同。(与\S相反) 比如:of\sthe
-
\b 匹配任何单词边界。(与\B相反) 比如:\bThe\b
-
\N 匹配已保存的子组N。 比如:price:\16
-
\c 逐字匹配任何特殊字符c。(即按照字面意思匹配,不匹配特殊含义) 比如:\. , \\ , \*
\A(\Z) 匹配字符串的起始(结束)。 比如:\AHello
- 拓展表示法:
-
(?iLmsux) 在正则表达式中嵌入一个或者多个特殊“标记”参数。(或者通过函数/方法) 比如:(?x),(? im)
-
(?:...) 表示一个匹配不用保存的分组。 比如:(?:\w+\.)*
-
(?P...) 像一个仅由name标记而不是数字ID标识的正则分组匹配 比如:(?P)
-
(?P=name) 在同一字符串中匹配由(?P)分组的之前文本 比如:(?P=data)
-
(?#...) 标识注释,所有内容都被忽略。 比如:(?#comment)
-
(?=...) 匹配条件是如果....出现在之后的位置,而不使用输入字符串:称作正向前视断言。 比如:(?=.com)
-
(?!...) 匹配条件是如果....不出现在之后的位置,而不使用输入字符串:称作负向前视断言。 比如:(?!.net)
-
(?<=...) 匹配条件是如果....出现在之前的位置,而不使用输入字符串:称作正向后视断言。 比如:(?<=800-)
-
(?(id/name)Y|N) 如果分组所提供的id或者name存在,就返回正则表达式的条件匹配Y,如果不存在,就返回N;|N是可选项。 比如:(?(1)y|x)
带入实例讲解正则表达式: 正则表达式 匹配的字符串 at|home at、home r2d2|c3po r2d2、c3po bat|bet|bit bat、bet、bit f.o 匹配字符"f"和"o"之间的任意一个字符:例如fdo、f4o、f%o .. 任意两个字符 .end 匹配在字符串end之前的任意一个字符 ^From 任何以From作为起始的字符串 /bin/tcsh$ 任何以/bin/tcsh作为结尾的字符串 ^Subject:hi$ 任何由单独的字符串Sunject:hi构成的字符串 the 任何包含the的字符串 \bthe 任何以the开始的字符串 \bthe\b 仅仅匹配单词the \Bthe 任何包含但不以the作为起始的字符串 b[aeiu]t bat、bet、bit、but [cr][23][dp][o2] 匹配一个包含四个字符的字符串:第一个字符是c或者r,第二个字符是2 或者3,第三个字符是d或者p,最后一个字符是o或者2。 z.[0-9] 字符z后面跟着任意一个字符,然后在跟着一个数字。 [r-u][env-y][us] 字母r,s,t或者u后面跟着e,n,v,w,x或者y,然后再跟着u或者s [^aeiou] 一个非元音字符 [^\t\n] 不匹配制表符或者\n ["-a] 在一个ASCII系统中,所有支付都位于"和a之间。即34-97之间。 [dn]ot? 字母d或者n,后面跟着一个o,然后是最多一个t。例如:do,no,dot 0?[1-9] 任何一位1到9的数字,它可能前置一个0。 [0-9]{15,16} 匹配15或者16个数字 </?[^>]+> 匹配全部有效的(和无效的)HTML标签 \w+-\d+ 一个由字母数字组成的字符串和一串由一个连字符分隔的数字 [A-Za-z]\w* 第一个字符是字母,其余字符(如果存在)可以是字母或者数字 \d{3}-\d{3}-\d{4} 电话号码,例如800-010-0010 \w+@\w+.com 以XXX@YYY.com格式表示的电子邮箱地址 \d+(.\d*)? 表示浮点数字符串,任何十进制数字后面接一个小数点和零个 (Mr?s?.)?[A-Z][a-z][A-Za-z-]+ 名字和姓氏,以及对名字的限制(如果有,首字母必须大写,后续字母小 写,全名前可以有Mr.、Mrs.、Ms.或者M.作为称谓,以及灵活的姓氏。 (?:\w+.) 以句点作为结尾的字符串,例如:google. 、twitter. ,但是这些匹配不 会保存下来供后续使用和数据检索 (?#comment) 此处不做匹配,只是作为注释。 (?=.com) 如果一个字符串后面跟着.com才做匹配操作,并不使用任何目标字符串 (?!.net) 如果一个字符串后面不是跟着.net才做匹配操作。 (?<=800-) 如果字符串之前为800-才做匹配,并不使用任何输入的字符串 (? 类IP地址 (?(1)y|x) 如果一个匹配组1(\1)存在,就与y匹配,否则就与x匹配