Python 正则表达式

Python3 正则表达式模块 —— re

简述

Python正则表达式风格类似Perl
Python官方文档

注:Python正则表达式适用于strbytes类型,但不可混用;

正则表达式语法

特殊字符

  1. . 默认模式下,匹配任一字符(不包括换行),如果指定re.DOTALL则匹配任一字符(包括换行);
  2. ^ 默认仅匹配字符串开始内容(仅指字符串内容的开始,不会匹配新的换行后的内容),如果指定re.MULTILINE则会匹配每个字符串行首的内容;
  3. $ 默认仅匹配字符串开始内容,指定re.MULTILINE匹配规则同^
  4. * 匹配前面正则表达式 0+ 次(表示匹配0或者多次);
  5. + 匹配前面表达式 1+ 次;
  6. ? 匹配前面表达式 0/1 次;
  7. *?,+?,?? 限制*,+,?匹配程度,将其匹配内容最小化,如使用'<.*?>'匹配'<a>'
  8. {m} 表示匹配的前面正则表达式的次数需满足m次;
  9. {m,n} 表示匹配前面正则表达式m-n次,n设置为空时,设置m可设置最小次数;m为空时,设置n可设置为最大次数;
  10. {m,n}? 表示进行最小值m次数进行匹配;
  11. \ 对内容进行转义;
  12. [] 用于声明字符集,如下所示:
    • 单独列出的字符,如[awk],表示匹配a,w,k任一;
    • 字符范围,如[a-z](小写a至z),[0-5][0-9](00-59),[0-9A-Fa-f](表示十六进制);
    • 特殊字符在[]中失去特殊意义,如[(*^+)],匹配中间任一单一字符;
      • ^ 出现在[]中最前面位置时,表示匹配内容不包括[]中^字符后的正则匹配内容;
      • ] 出现在匹配集合时,需对其进行转义或将其放置到匹配内容的最前面,如[()[\]{}][][(){}]
    • 在集合中接受字符类,如\S \w
  13. |A|B,对A或B进行匹配,如果A匹配成功,则不会进行B匹配,匹配从左到右进行;
  14. (...) 匹配括号内的正则表达式,并表明匹配组的开始和结束;
  15. (?...) 扩展符号((?无具体意义,仅表示扩展的语法结构)不会创建新的组,但是(?P<name>...)是唯一的例外,如下为支持的扩展:
    • (?aiLmsux) 用于包含正则模块标志成为正则表达式的一部分,而不是将标志选项传递至re.compile()函数;
      • a == re.A,表示ASCII-only匹配;
      • i == re.I,表示ignore case匹配;
      • L == re.L,表示locale dependent匹配;
      • m == re.M,表示multi-line匹配;
      • s == re.S,表示dot matches all匹配;
      • u == re.U,表示Unicode matching匹配;
      • x == re.X,表示verbose匹配;
    • (?:...) 正则圆括号的非捕获版本,匹配括号内的任意正则表达式,但是在执行完匹配或者模型引用后,通过正则组匹配的子字符串无法被检索;
    • (?imsx-imsx:...) 为表达式部分设置或移除对应i m s x标志;
    • (?P<name>...) 类似正则圆括号匹配,但是通过正则组匹配的子字符串可以通过符号连接式的组名访问(组名必须为有效的Python标志,每个组名必须唯一的定义),命名组在三种上下文中的引用方式,如(?P<quote>['"].*?)(?P=quote)
      1. 在同样的匹配模型中引用:
        • (?P=quote)
        • \1
      2. 当处理匹配对象,如m时:
        • m.group('quote')
        • m.end('quote')
      3. 在一个字符串中将其传递给re.sub()的repl选项:
        • \g
        • \g<1>
        1. 在一个字符串中将其传递给re.sub()的repl选项:
        • \g
        • \1
    • (?P=name) 对命名组的后向引用,它匹配通过之前组名匹配的任何文本;
    • (?#...) 一种评论,括号内的内容被简单忽略;
    • (?=...) 此称谓‘前瞻断言’,当其匹配成功后,返回后面的内容,如:
      • Isaac(?=Asimov)表示如果Asimov跟在Isaac后面,则匹配Isaac
    • (?!...) 此称谓’反向前瞻断言‘,与(?=...)相反;
    • (?<=...) 匹配正则表达式后面的内容,如:
      • (?<=abc) 匹配abcdef后为def
    • (?<!...) 与`(?<=...)相反;
    • (?(id/name)yes-pattern|no-pattern)

特殊字符序列

  1. \number 匹配相同数字组的内容,仅可以匹配前99个组中的1个,0或3位的数字不会被当作组匹配解释,而是作为十进制值来做匹配;
  2. \A 仅匹配字符串的开始;
  3. \b 匹配空字符串,但仅限于单词的开始或者结尾,空字符串指的是匹配内容为非组成单词的字母,如r'\bfoo\b'匹配foofoo.,bar foo,(foo)等;
  4. \B 匹配空字符串,但是仅仅当其不在单词的开始或者结尾,如r'py\B'匹配python3py3,非pypy.
  5. \d str匹配任何的Unicode十进制数字;bytes匹配任何十进制数字;
  6. \D 匹配任意非十进制数字,注意ASCII标志的区别,是\d的反面;
  7. \s str匹配Unicode空白字符,包括\v\t\n\f\r和其它在印刷中授权的空白字符,如果指定ASCII标志,则只仅仅匹配\v\t\n\v\f
  8. \S\s的反面,指匹配非空白字符;
  9. \w 匹配Unicode字符集,如果指定ASCII标志,则指[a-z0-9A-Z]
  10. \W 匹配\w的反面,指定ASCII时,等同[^a-z0-9A-Z]
  11. \Z 仅仅匹配字符串的末尾。

模块内容

模块常量

  1. re.A | re.ASCII
  2. re.DEBUG
  3. re.I | re.IGNORECASE
  4. re.L | re.LOCALE
  5. re.M | re.MULTILINE
  6. re.S | re.DOTALL
  7. re.X | re.VERBOSE

模块函数

  1. re.compile(pattern, flag=0),生成正则表达式对象;
  2. re.search(pattern, string, flags=0) 如果无匹配,返回None;
  3. re.match(pattern, string, flag=0);
  4. re.fullmatch(pattern, string, flag=0);
  5. re.split(pattern, string, maxsplit=0, flag=0);
  6. re.findall(pattern, string, flag=0);
  7. re.finditer(pattern, string, flag=0);返回可迭代的匹配对象
  8. re.sub(pattern, repl, string, count=0, flag=0) 重构匹配对象;
  9. re.subn 同上,返回元组;
  10. re.escape(pattern) 生成对象的匹配模型,除了ASCII字符数字_
  11. re.purge() 清除正则表达式缓存;

正则表达式对象

正则表达式对象生成:pattern = re.compile('pattern')

  1. regex.search(string[,pos[, endpos]])
  2. regex.match(string[, pos[, endpos]])
  3. regex.fullmatch(string[, pos[, endpos]])
  4. regex.split(string, maxsplit=0)
  5. regex.findall(string[, pos[, endpos]])
  6. regex.finditer(string[, pos[, endpos]])
  7. regex.sub(n)(repl, string, count=0)
  8. regex.flags
  9. regex.groups
  10. regex.groupindex
  11. regex.pattern 正则表达式模型字符串

匹配对象

匹配对象总返回True的布尔值。
match = re.search(pattern, string)

  1. match.expand(template)
  2. match.group([group1,...])
  3. match.groups(default=None)
  4. match.groupdict(default=None)
  5. match.start([group])
  6. match.end([group])
  7. match.span([group])
  8. match.pos
  9. match.endpos
  10. match.lastindex
  11. match.lastgroup
  12. match.re
  13. match.string
posted @ 2018-01-04 21:48  冬天之歌  阅读(291)  评论(0编辑  收藏  举报