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 以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匹配