banner
朝闻道

朝闻道

做个知行合一的人
email

Python正则表达式pattern分类

网上的相关资料非常多,但都很乱。于是我做了个分类,一来自己方便查看,二来看到此文章的同仁也能省去些麻烦。

提示:正则表达式中的 pattern 参数通常都包含反斜杠,为了防止它们被识别为转义字符,最好使用原始字符串 r'' 来表示它们。(如 r'\t',等价于 \\t ) 匹配相应的特殊字符。

使用原始字符串的优点是可以少写\号,代码阅读起来也更容易些。

正则表达式四大功能:匹配 (bool 值)、获取、替换、分割。

匹配单个字符#

  • . :表示任意一个字符。如表达式't.o'too'two'都符合条件。
  • [...]:匹配 [] 中列举的所有字符中的一个
    • 一个 [] 表示一个字符:[amk] 匹配 'a','m' 或 'k'。[a-zA-Z0-9]表示所有字母 + 数字。[A-Z][a-z]表示第一个字符为大写字母,第二个字符为小写字符,即两个字符。
    • 注意无需使用 , 分割内容,[0-35-9] 表示 0~3 与 5~9。
    • 可以用 - 给出范围。如 [abc][a-c] 含义相同。
  • [^...]:不在 [] 中的字符中的一个
    • [^abc] 匹配除了 a,b,c 之外的字符。

匹配单个字符 —— 它们可以写在字符集 [] 中#

  • \w: 匹配数字字母下划线。等价于[a-zA-Z0-9_],在 Unicode 字符中还可以匹配汉字、全角数字。
  • \W:匹配非数字字母下划线,等价于[^A-Za-z0-9_]
  • \s:匹配任意空白字符、空格、tab 键。等价于[\t\n\r\f]
  • \S:匹配任意非空字符,等价于[^\t\n\r\f]
  • \d:匹配任意数字,等价于 [0-9]
  • \D:匹配任意非数字,等价于[^0-9]

匹配多个字符#

  • *:匹配 * 号前一个字符出现至少 0 次的表达式。如表达式abc*,匹配值ababccc
  • +:匹配前⼀个字符出现 1 次或者⽆限次。如表达式abc+,匹配值abcabccc
  • ?:匹配前⼀个字符出现 1 次或者 0 次,即要么有 1 次,要么没有。非贪婪。
  • {m}:匹配前⼀个字符出现 m 次。如表达式ab{2}c,匹配值abbc
  • {m,}:匹配前面表达式至少 m 次
  • {,n}:匹配前面的正则表达式最多 n 次
  • {m,n}:匹配前⼀个字符出现至少 m 至多 n 次。如表达式ab{1,3}c,匹配值abcabbcabbbc

特殊匹配#

  • | :匹配左右任意一个表达式。如匹配 0-100 之间的数字,表达式re.match(r'[1-9]?\d$|100',string)
  • ():匹配括号内的表达式,也可表示一个组 (整体),组与组之间联合使用。可以和|搭配,如识别邮箱时(163|126|qq)
  • \b:匹配单词边界。
    • \b是零宽度不占字符的,它是一个边界线的存在,在\b的左右两侧,要求一个是\w,一个是\W
    • 也就是用于匹配处在边界的字符,比如\bhe可以匹配 "he" 但不能匹配 "where"。
    • \bman\b可以匹配 "I am a man, not a woman" 中的man,而不会匹配woman;但man\b会匹配出manwoman,因为后者的 "man" 也处在边界,使用时要注意。
  • \B:匹配非单词边界。
    • \b相反,这样理解:在\B的左右两侧,要么全是\w,要么全是\W
    • py=\B可以匹配 "py==" 中的 "py=",但不能匹配 "py=1" 中的 "py="。
  • \n,\t,等:匹配一个换行符,匹配一个制表符,等。

位置类#

  • ^:匹配字符串的开头。
  • $:匹配字符串的末尾。
  • \A:匹配字符串开始。
  • \Z:匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
  • \z:匹配字符串结束。
  • \G:匹配最后匹配完成的位置。

实例#

  • [Pp] ython:匹配 "Python" 或 "python"
  • rub [ye]:匹配 "ruby" 或 "rube"
  • [aeiou]:匹配中括号内的任意一个字母
  • [0-9]:匹配任何数字。类似于 [0123456789]
  • [a-z]:匹配任何小写字母
  • [A-Z]:匹配任何大写字母
  • [a-zA-Z0-9]:匹配任何字母及数字
  • [^aeiou]:除了 aeiou 字母以外的所有字符
  • [^0-9]:匹配除了数字外的字符

*:星号。匹配前一个字符 0 到 n 次,如'pytho\*n'可以匹配 pythn、pythoon、pythooooon 等。还有其它匹配重复字符的如?、+ 或 {m,n},其中 {n,m} 可以灵活使用,它表示匹配 n 次到 m 次。

\b 的用法也可以很灵活,在给定的字符串中,找到以小写字母开头的单词。

ss = "i Am a gOod boy  baby!!"
result=re.findall(r'\b[a-z][a-zA-Z]*\b',ss)
print(result)
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。