python之re模块

来源:互联网 发布:java编辑工具 编辑:程序博客网 时间:2024/05/18 02:02

1.正则表达式语法

特殊字符

  • 普通元字符
  • “.”:表示除换行符以外的任意字符(DOTALL被指定则可以匹配包括换行符的任意字符,例如:re.findall(r”.”, “k\na”,re.DOTALL))
  • “^”:表示从字符串起始位置开始匹配,在多行模式下从每个换行符后面开始匹配
  • “$”:表示从字符串末尾匹配,在多行模式下匹配换行符前的字符
  • ” \ “:表示消除特殊含义
  • 数量元字符
    • ”*”:表示匹配0次或多次,尽可能匹配多次
    • “+”:表示匹配1次或多次,尽可能匹配多次
    • “?”:表示匹配0次或1次
    • “*?”“+?”“??”:表示将贪婪匹配转换为非贪婪匹配
    • “{m}”:精确的指定RE应该被匹配m次
    • “{m, n}”:匹配m到n次,”{, n}”表示匹配0到n次,”{m, }”表示匹配m到无穷次
    • “{m, n}?”:表示匹配最少次数
  • 逻辑、分组元字符
    • ” [ ] “:表示字符集合
    • 在这个集合中,字符可以被单独罗列
    • 字符范围可以表明通过给予两个字符和分离他们的 ‘-‘,如果要匹配’-‘,则需要’-‘来转义
    • 在集合内,特殊字符失去特殊意义(除’-‘,’^’,’\’)
    • 不在一段范围之内的字符可以通过补集’^’匹配
    • ” | “:表示匹配管道符两边任意一边的字符
    • (…):表示为括号里面匹配的字符分组
  • 特殊构造元字符(不作为分组)
    • (?…):扩展符号,后面接的字符进一步决定语法结构
    • (?aiLmsux):aiLmsux每个字母代表一个匹配模式,只能用在正则表达式开头,可选多个
    • (?:…):(…)的不分组版,用于使用’|’或后接数量词
    • (?P…):对匹配到的字符串进行命名
    • (?P=name)
    • (?#…):注释:忽略括号内的内容
    • (?=…):匹配的字符后应该是…,例如a(?=\d),表示a之后应该是个数字(不消耗字符串内容)
    • (?!…):匹配的字符后不应该是…,例如a(?!\d),表示a之后不应该是个数字(不消耗字符串内容)
    • (?<=…):匹配的字符前应该是…,例如(?<=\d)a,表示a之前应该是个数字(不消耗字符串内容)
    • (?

预定义字符

  • \number
  • \A:在字符串开始处匹配,同^
  • \b:仅在单词开头或结尾匹配
  • \B:匹配不在单词开头和结尾的字符
  • \d:匹配任何十进制数;相当于[0-9]
  • \D:匹配任何非数字字符;相当于[^0-9]
  • \s:匹配任何空白字符;相当于[\r\n\r\f\v]
  • \S:匹配任何非空白字符;相当于[^\r\n\r\f\v]
  • \w:匹配任何字母数字字符;相当于[a-zA-Z0-9]
  • \W:匹配任何非字母数字字符;相当于[^a-zA-Z0-9_]
  • \Z:在结尾处匹配,同$
  • 正则表达式分析器也接受大多数支持通过 Python 字符串的标准转义:\a \b \f \n \r \t \u \U \v \x \

2.模块内容

模块定义了几个函数、 常量和一个异常。某些函数是编译正则表达式全特性方法的简化版本。大多数复杂应用程序总是使用已编译的形式。

  • re模块的函数
    • re.compile(pattern, flags=0),将正则表达式模式编译成一个正则表达式对象regex,匹配时可以调用它的方法
    • re.search(pattern, string, flags=0),从字符串第一个位置开始搜索直到找到一个匹配的字符
    • re.match(pattern, string, flags=0),从字符串第一个位置开始搜索找到匹配的字符
    • re.fullmatch(pattern, string, flags=0),全匹配则返回一个match对象,否则返回None
    • re.split(pattern, string, maxsplit=0, flags=0),分隔字符串,将字符串拆分的模式的匹配项。如果在模式中使用捕获括号,则然后也作为结果列表的一部分返回的文本模式中的所有组。如果maxsplit不为零,顶多maxsplit分裂发生,并且该字符串的其余部分将作为列表的最后一个元素返回。
    • re.findall(pattern, string, flags=0),返回一个列表,包含所有满足匹配的字符
    • re.finditer(pattern, string, flags=0),返回一个迭代器,迭代器元素是match对象
    • re.sub(pattern, repl, string, count=0, flags=0),替代,类似于字符串的replace
    • re.subn(pattern, repl, string, count=0, flags=0),与sub相同,除了返回(new_string, number_of_subs_made)
    • re.escape(string),消除转义(除了字母、数字、’_’),例如:re.findall(re.escape(“\n”),”asdf\r\nsgfdg”),输出’\n’,如果不用这个函数那么我们只能自己转义,有了这个函数那么在使用需要转义的字符时就很方便
    • re.purge(),清除正则表达式缓存
  • 搜索选项
    • re.ASCII,使用ASCII码进行匹配(py2不支持)
    • re.DEBUG,显示调试信息编译的表达式
    • re.IGNORECASE,不管大小写都匹配
    • re.LOCALE
    • re.MULTILINE,匹配多行(将多行当成一行匹配)
    • re.DOTALL,使’ . ’ 也匹配换行符
    • re.VERBOSE,为较长匹配模式注释
    • 搜索选项用法,multiline = re.compile(pattern, re.MULTILINE)
    • 还可以在pattern中加入flag,例如:pattern = r’(?i)\bT\w+’,regex = re.compile(pattern),(?i)就是忽略大小写的意思
    • Regular Expression Flag Abbreviations
      Flag ———->Abbreviation
      ASCII————->a
      IGNORECASE—->i
      MULTILINE——>m
      DOTALL———>s
      VERBOSE——–>x
  • regex对象的方法和属性
    • regex.search(string[, pos[, endpos]])
    • regex.match(string[, pos[, endpos]])
    • regex.fullmatch(string[, pos[, endpos]])
    • regex.split(string, maxsplit=0)
    • regex.findall(string[, pos[, endpos]])
    • regex.finditer(string[, pos[, endpos]])
    • regex.sub(repl, string, count=0)
    • regex.subn(repl, string, count=0)
    • regex.flags,正则表达式匹配的标志
    • regex.groups,捕获模式中的组数
    • regex.groupindex
    • regex.pattern,模式字符串中从中重新对象的编译
  • match 对象的方法和属性(由match和search产生)
    • match.expand(template)
    • match.group([group1, …]),返回特定组的匹配结果(如果不加参数则返回整组的匹配结果)
    • match.groups(default=None),返回一个tuple,包含所有匹配到的子组
    • match.groupdict(default=None),返回一个组名和值的字典
    • match.start([group]),匹配上的第一个字符位置索引
    • match.end([group]),匹配上的最后一个字符位置索引
    • match.span([group]),返回一个tuple,(m.start(group), m.end(group))
    • match.pos,返回传递给match或search开始匹配的位置
    • match.endpos
    • match.lastindex
    • match.lastgroup
    • match.re
    • match.string,被匹配的字符串

3.正则语法总结图

这里写图片描述

0 0