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

    模块内容

    模块常量

    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
  • 相关阅读:
    log4j日志基本配置
    MyBatis基本应用
    Java properties配置文件
    Java DAO模式
    Java方式 MySQL数据库连接
    bug 复制代码没有审查,没有完全就该变量名
    cocos3 深入理解tiledmap
    cocos3 深入理解单例模式
    cocos3 CC_BREAK_IF(m_pGameMap==NULL);
    cocos2d3 宏定义屏幕宽高,这样就不用重复获取了
  • 原文地址:https://www.cnblogs.com/li1234yun/p/8196206.html
Copyright © 2011-2022 走看看