python正则随记

表1. 正则元字符和语法

符号 说明 实例
. 表示任意字符,如果说指定了 DOTALL 的标识,就表示包括新行在内的所有字符。 ‘abc’ >>>‘a.c’ >>>结果为:‘abc’
^ 表示字符串开头。 ‘abc’ >>>’^abc’ >>>结果为:‘abc’
$ 表示字符串结尾。 ‘abc’ >>>‘abc$’ >>>结果为:‘abc’
*, +, ? '*‘表示匹配前一个字符重复 0 次到无限次,’+‘表示匹配前一个字符重复 1次到无限次,’?'表示匹配前一个字符重复 0 次到1次 ‘abcccd’ >>>‘abc*’ >>>结果为:‘abccc’
‘abcccd’ >>>‘abc+’ >>>结果为:‘abccc’
‘abcccd’ >>>‘abc?’ >>>结果为:‘abc’
*?, +?, ?? 前面的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后面加?号使其变成惰性匹配即非贪婪匹配 ‘abc’ >>>‘abc*?’ >>>结果为:‘ab’
‘abc’ >>>‘abc??’ >>>结果为:‘ab’
‘abc’ >>>‘abc+?’ >>>结果为:‘abc’
{m} 匹配前一个字符 m 次 ‘abcccd’ >>>‘abc{3}d’ >>>结果为:‘abcccd’
{m,n} 匹配前一个字符 m 到 n 次 ‘abcccd’ >>> ‘abc{2,3}d’ >>>结果为:‘abcccd’
{m,n}? 匹配前一个字符 m 到 n 次,并且取尽可能少的情况 ‘abccc’ >>> ‘abc{2,3}?’ >>>结果为:‘abcc’
\ 对特殊字符进行转义,或者是指定特殊序列 ‘a.c’ >>>‘a.c’ >>> 结果为: ‘a.c’
[] 表示一个字符集,所有特殊字符在其都失去特殊意义,只有: ^ - ] \ 含有特殊含义 ‘abcd’ >>>‘a[bc]’ >>>结果为:‘ab’
| 或者,只匹配其中一个表达式 ,如果|没有被包括在()中,则它的范围是整个正则表达式 ‘abcd’ >>>'abc
( … ) 被括起来的表达式作为一个分组. findall 在有组的情况下只显示组的内容 ‘a123d’ >>>‘a(123)d’ >>>结果为:‘123’
(?#…) 注释,忽略括号内的内容 特殊构建不作为分组 ‘abc123’ >>>‘abc(?#fasd)123’ >>>结果为:‘abc123’
(?= … ) 表达式’…’之前的字符串,特殊构建不作为分组 在字符串’ pythonretest ’中 (?=test) 会匹配’ pythonre ’
(?!..) 后面不跟表达式’…’的字符串,特殊构建不作为分组 如果’ pythonre ’后面不是字符串’ test ’,那么 (?!test) 会匹配’ pythonre ’
(?<= … ) 跟在表达式’…’后面的字符串符合括号之后的正则表达式,特殊构建不作为分组 正则表达式’ (?<=abc)def ’会在’ abcdef ’中匹配’ def ’
(?:) 取消优先打印分组的内容 ‘abc’ >>>’(?:a)(b)’ >>>结果为’[b]’
?P<> 指定Key ‘abc’ >>>’(?Pa)>>>结果为:groupdict{n1:a}

表2.特殊序列

特殊表达式序列 说明
\A 只在字符串开头进行匹配。
\b 匹配位于开头或者结尾的空字符串
\B 匹配不位于开头或者结尾的空字符串
\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_]
\Z 只在字符串结尾进行匹配

说明:

  1. 在python中的re模块中正则的通常写法采用原始字符串形式(raw string):

      a = 'one1two2three3four4'
      ret = re.findall(r'(\d+)',a)
    
  2. 符号说明:
    列子1:

     string1 = "python 是一种 编程  language 吗?  是  | 不是  aaaaaa";
     list4 = re.findall("([^是yg]+)", string1);
     #在[  ]里面的字符会分开一一与字符串匹配
     #假设'是[yg]'会解析匹配为'是y','是g'分别去匹配
     #在[   ]中的^表示不匹配后面接入的字符   [^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
     结果:
     ['p', 'thon ', '一种 编程  lan', 'ua', 'e 吗?  ', '  | 不', '  aaaaaa']
    

    列子2:

     a = "python java C++ js html GO";
     list4 = re.findall(r'n(.*)l', a);#  会匹配首尾字符 根据中间括号中的字符串比对输出
     print(list4)
     list4 = re.findall(r'(.*)', a);
     print(list4)
     list4 = re.split(r'n(.*)l', a, 1);
     print(list4);
     list4 = re.split(r'n (j)a', a);#  去掉括号外面相同的字符,根据括号里面的字符匹配分组
     print(list4);
     结果:
     [' java C++ js htm']
     ['python java C++ js html GO', '']
     ['pytho', ' java C++ js htm', ' GO']
     ['pytho', 'j', 'va C++ js html GO']
    

你可能感兴趣的:(python)