Python的正则表达式

  • 常见字符:

    1. literal 直接匹配字符串literal 比如:foo*
    2. re1|re2 匹配正则表达式re1或者re2 比如: foo|bar
    3. . 匹配任何字符(除了\n之外) 比如: a.c
    4. ^ 匹配字符串起始部分 比如:^Hello
    5. $ 匹配字符串终止部分 比如:/bin/*sh$
    6. (星号) 匹配0次或者多次前面出现的正则表达式 比如:[0-9a-zA-Z]
    7. (加号)+ 匹配1次或者多次前面出现的正则表达式 比如:[a-z]+.com
    8. ? 匹配0次或者1次前面出现的正则表达式 比如:goo?
    9. {N} 匹配N次前面出现的正则表达式 比如:[0-9]{2}
    10. {M,N} 匹配M~N次前面出现的正则表达式 比如:[0-9]{3-5}
    11. [...] 匹配字符串中的任意一个字符 比如:[aeiou]
    12. [..x-y..] 匹配x~y方位中的任意一个字符 比如:[0-9],[A-Za-z]
    13. [^...] 不匹配字符串中的任意一个字符,或者某个范围内的字符。 比如:[^aeiou],[^A-Za-z0-9]
    14. (|+|?|{})? 匹配上面频繁出现/重复出现的符号的非贪婪版本( 、+、?、{}) 比如:.*?[a-z]
    15. (...) 匹配封闭的正则表达式,然后另存为子组 比如:([0-9]{3})?,f(oo|u)bar
  • 特殊字符:

    1. \d 匹配任何十进制数字,与[0-9]表达的一样。(\D与\d相反,\D表示匹配任何非数值型的数字 比如:date\d+.txt
    2. \w 匹配任何的字母数字字符 ,与[A-Za-z0-9]相同。(与\W相反) 比如:[A-Za-z]\w+
    3. \s 匹配任何空格字符,与[\n\t\r\v\f]相同。(与\S相反) 比如:of\sthe
    4. \b 匹配任何单词边界。(与\B相反) 比如:\bThe\b
    5. \N 匹配已保存的子组N。 比如:price:\16
    6. \c 逐字匹配任何特殊字符c。(即按照字面意思匹配,不匹配特殊含义) 比如:. , \ , *
      \A(\Z) 匹配字符串的起始(结束)。 比如:\AHello
  • 拓展表示法:
    1. (?iLmsux) 在正则表达式中嵌入一个或者多个特殊“标记”参数。(或者通过函数/方法) 比如:(?x),(? im)
    2. (?:...) 表示一个匹配不用保存的分组。 比如:(?:\w+.)*
    3. (?P...) 像一个仅由name标记而不是数字ID标识的正则分组匹配 比如:(?P)
    4. (?P=name) 在同一字符串中匹配由(?P)分组的之前文本 比如:(?P=data)
    5. (?#...) 标识注释,所有内容都被忽略。 比如:(?#comment)
    6. (?=...) 匹配条件是如果....出现在之后的位置,而不使用输入字符串:称作正向前视断言。 比如:(?=.com)
    7. (?!...) 匹配条件是如果....不出现在之后的位置,而不使用输入字符串:称作负向前视断言。 比如:(?!.net)
    8. (?<=...) 匹配条件是如果....出现在之前的位置,而不使用输入字符串:称作正向后视断言。 比如:(?<=800-)
    9. (?(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 以[email protected]格式表示的电子邮箱地址
\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匹配