zoukankan      html  css  js  c++  java
  • python正则表达式记录

    元字符:

    *  星号   它指定前一个字符可以被匹配零次或更多次 

    >>> re.match('a[bcd]*b', 'abcbdabcd').group()
    'abcb'
    >>> re.match('a[bcd]*b', 'abcbdbcd').group()
    'abcbdb'
    >>>

    匹配a和b之间的字符,如果有,那么继续直到没有为止。所以它是贪婪匹配。

    如果a和b之间有字符,但是不是bcd中的任意一个那么将会停止,取到上次匹配的结果。

    +  加号   指定前边的字符一次或者更多次。区别于 * 的是,至少需要一次。

    >>> re.match('c+t', 'ctct').group()
    'ct'
    >>> re.match('c+t', 'tct').group()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'
    >>>

    +  是非贪婪匹配。只要满足条件找到一个就结束。

    ?  问号   匹配一次或零次  可以认为它用于标识某事物是可选的。例如:home-?brew 匹配 "homebrew" 或 "home-brew"。

    >>> re.match('www-?mmm', 'www-mmm').group()
    'www-mmm'
    >>> re.match('www-?mmm', 'wwwmmm').group()
    'wwwmmm'
    >>>

    可以看到有无 - 减号都可以

    最复杂的重复限定符是 {m,n}(注意m,n之间不能有空格),其中 m 和 n 是十进制整数。

    该限定符的意思是至少有 m 个重复,至多到 n 个重复。

    举个例子,a/{1,3}b 将匹配 "a/b","a//b" 和 "a///b"。它不能匹配 "ab" 因为没有斜杠,也不能匹配 "a////b" ,因为有四个。

    >>> re.match('a/{1,3}b', 'a/b').group()      #一个斜杠
    'a/b'
    >>> re.match('a/{1,3}b', 'ab').group()       #没有斜杠
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'
    >>> re.match('a/{1,3}b', 'a////b').group()    #四个斜杠
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'NoneType' object has no attribute 'group'
    >>>

    细心的读者也许注意到其他三个限定符都可以用这样方式来表示。

    {0,}  等同于 *,{1,}  等同于 +,而 {0,1} 则与 ? 相同。

    如果可以的话,最好使用 *,+,或?。很简单因为它们更短也更容易懂。

    .    点号    匹配任何除了换行以外的字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行。

    系统预设特殊字符:

    d 匹配任何十进制数;它相当于类 [0-9]。
    D 匹配任何非数字字符;它相当于类 [^0-9]。
    s 匹配任何空白字符;它相当于类 [ fv]。
    S 匹配任何非空白字符;它相当于类 [^ fv]。
    w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
    W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。

    分组:

    >>> re.match('(a(b(c)))d', 'abcd').group()
    'abcd'
    >>> re.match('(a(b(c)))d', 'abcd').group(0)
    'abcd'
    >>> re.match('(a(b(c)))d', 'abcd').group(1)
    'abc'
    >>> re.match('(a(b(c)))d', 'abcd').group(2)
    'bc'
    >>> re.match('(a(b(c)))d', 'abcd').group(3)
    'c'
    >>>

    我们可以看出,这是典型的剥洋葱模式。从外层开始,一层一层向内。最内层的分组将依次被放在从索引为0开始的一个_sre.SRE_Match object中。

     
  • 相关阅读:
    OpenCV---在图片上加入文字
    DosBox 报错 this program requires dosxnt.exe to be in your path
    iOS开发-UITableView单选多选/复选实现1
    LeetCode第七题,Reverse Integer
    【PostgreSQL】PostgreSQL操作-psql基本命令
    Bootstrap的js插件之弹出框(popover)
    Qt Quick 图像处理实例之美图秀秀(附源代码下载)
    【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
    用Visual Studio高版本号打开低版本号的project,转换时出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    如何安装ArchLinux
  • 原文地址:https://www.cnblogs.com/magic-zero/p/7102812.html
Copyright © 2011-2022 走看看