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中。

     
  • 相关阅读:
    把影响集中到一个点
    How to avoid Over-fitting using Regularization?
    适定性问题
    Numerical Differentiation 数值微分
    What Every Computer Scientist Should Know About Floating-Point Arithmetic
    Generally a good method to avoid this is to randomly shuffle the data prior to each epoch of training.
    What is the difference between iterations and epochs in Convolution neural networks?
    Every norm is a convex function
    Moore-Penrose Matrix Inverse 摩尔-彭若斯广义逆 埃尔米特矩阵 Hermitian matrix
    perl 类里的函数调用其他类的函数
  • 原文地址:https://www.cnblogs.com/magic-zero/p/7102812.html
Copyright © 2011-2022 走看看