zoukankan      html  css  js  c++  java
  • 正则表达式和特殊符号

    15.2.2  匹配任意一个单个的字符(.):
    
    
    点字符或菊花(.) 符号匹配除换行符(NEWLINE) 外的任意一个单个字符
    (Python的正则表达式有一个编译标识[S or DOTALL],该标识能去掉这个限制
    
    使(.) 在匹配时包括换行符(NEWLINEs))
    
    
    正表达式模式        匹配的字符串
    
    
    import re
    a="foo"
    if (re.match("f.o",a)):
        print '1111'
    
    	
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    
    import re
    a="fo"
    if (re.match("f.o",a)):
        print '1111'
    
      
     import re
    a="f
    o"
    if (re.match("f.o",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    
    Process finished with exit code 0
    
    15.2.4 从字符串的开头或结尾或单词边界开始匹配( ^/$ / /B )
    
    import re
    a="xxxfo"
    if (re.search("fo",a)):
        print '1111'
    
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    import re
    a="xxxfo"
    if (re.search("^fo",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    
    Process finished with exit code 0
    
    用这些符号的模式与我们将在本章讲述的其他大多数符号是不同的,因为这些符号指定了(匹配的位置)
    
    在上面的核心笔记里,我们曾说过"matching"和"searching"之间的区别,
    
    "matching" 是视图从整个字符串的开头进行匹配,
    
    "searching"则可从一个字符串的任意位置开始匹配
    
    import re
    a="Form11"
    if (re.search("^Form",a)):
        print '1111'
    
    
    特别说明,如果你想匹配这两个字符中的任何一个(或全部),就必须用反斜线进行转义。
    
    例如,如果你想匹配任何以美元符号($)结尾的字符串。
    
    “.*$$”.	
      
      import re
    a="aa$"
    if (re.search(".*$$",a)):
        print '1111'
    
    15.2.5 创建字符类([]):
    	
    尽管点号可用来匹配任意字符,但又时候你需要匹配某些个特殊的字符。
    
    正因为如此,	方括号([])被发明出来。使用方括号的正则表达式会匹配方括号里的任何一个字符
    
    正则表达式模式       匹配的字符串
    
    import re
    a="bat"
    if (re.search("b[aeiu]t",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    [cr][23][dp][o2]:
    
    一个包含4个字符的字符串:第一个字符是’r'或'c',后面是"2"或者"3",
    
    再接下来是"d"或"p",最后是"o"或"2"  
    
    import re
    a="c3po"
    if (re.search("[cr][23][dp][o2]",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    15.2.5  指定范围(-)或否定(^):
    
    import re
    a="zr1"
    if (re.search("z[0-9]",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    
    Process finished with exit code 0
    
    import re
    a="zr1"
    if (re.search("z.[0-9]",a)):
        print '1111'
    
    	
    	
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    字符"z" 后面跟任意一个字符,然后是一个十进制数字 
    
    import re
    a="z"
    if (re.search("[^aeiou]",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    15.2.6   使用闭包操作符(*,+,?,{}) 实现多次出现/重复匹配
    
    现在我们来介绍最常用的正则表达式符号,即,特殊符号 *,+和?,
    
    它们可以用于匹配字符串模式出现一次,多次,或未出现的情况。
    
    * 匹配它左边那个正则表达式出现零次或零次以上的情况
    
    import re
    a="z"
    if (re.search("[aeiou]*",a)):
        print '1111'
    
    import re
    a="a"
    if (re.search("[aeiou]*",a)):
        print '1111'
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    加号(+) 操作符匹配它左边那个正则表达式至少出现一次的情况
    
    import re
    a="a"
    if (re.search("[aeiou]+",a)):
        print '1111'
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    import re
    a="aib"
    if (re.search("[aeiou]+b",a)):
        print '1111'
    	
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    问号操作符(?) 匹配它左边那个正则表达式模式出现零次或一次的情况:
    
    还有花括号操作符({}),花括号里可以是单个的值,也可以是由逗号分开的一对值。
    
    如果是一个值,如,{N},则表示匹配N次出现:如果是一对值,即{M,N},
    
    就表示匹配M次到N此出现。
    
    可以在这些符号前用反斜线进行转义,使它们失去特殊作用,即,"*" 将匹配星号本身等
    
    import re
    a="abcefg"
    p=re.compile("([a-z]{3,5}).*")
    m=p.match(a)
    print m.group(1)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a15.py
    abcef
    
    在上表中,我们注意到问号出现了不只一次(被重载)
    
    问号有两种含义:
    
    1. 单独使用时表示匹配出现零次或一次的情况
    
    2.紧跟在表示重复的元字符后面时,表示要求搜索引擎匹配的字符串越短越好
    
    import re
    a="6699"
    if (re.search("66[a-z]?99",a)):
        print '1111'
    
    	
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    import re
    a="66u99"
    if (re.search("66[a-z]?99",a)):
        print '1111'
    
    	
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    1111
    
    import re
    a="66uu99"
    if (re.search("66[a-z]?99",a)):
        print '1111'
    
    	
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
    
    ?表示匹配出现0次或者1次
    
    
    import re
    a="66aa99bb99"
    p=re.compile("66(.*?)99")
    m=p.match(a)
    print m.group(1)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a15.py
    aa
    
    import re
    a="66aa99bb99"
    p=re.compile("66(.*)99")
    m=p.match(a)
    print m.group(1)
    
    C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a15.py
    aa99bb
    
    15.2.7  特殊字符表示字符集:
    
    我们还提到有一些特殊字符可以用来代表字符集合。例如,你可以不使用"0-9"这个范围表示十进制数字
    
    而改用简写"d"表示 
    
    另一个特殊的字符"w" 可用来表示整个字符数字的字符集,即相当于"A-Za-z0-9"的简写形式
    
    特殊字符"s" 代表空白字符 
    
    这些特殊字符的大写形式表示不匹配,比如,"D"表示非十进制数字的字符 
    
    15.2.8 用圆括号(())组建组:
    
    现在,或许我们可以匹配一个字符串和丢弃那些不匹配的字符串了,但又时候,我们也许对匹配的数据本身更有兴趣。
    
    
    但有时候,我们也许对匹配的数据本身更有兴趣。 我们不仅想知道是否整个字符串匹配我们的条件(正则表达式)
    
    还像在匹配成功时取出某个特定的字符串或子字符串。
    
    一对圆括号(())和正则表达式一起使用时可以实现以下任意一个(或两个)功能:
    
    1.对正则表达式进行分组
    
    2.匹配子组
    
    有时你需要对正则表达式进行分组,其中一个很好的例子就是,你要用两个不同的正则表达式去比较一个字符串。
    
    另一个理由是为整个正则表达式添加一个重复操作符
    

  • 相关阅读:
    漂亮的自适应宽度的多色彩CSS图片按钮
    Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())
    QT的父子Widget之间消息的传递(如果子类没有accept或ignore该事件,则该事件会被传递给其父亲——Qlabel与QPushButton的处理就不一样)
    QT内置的ICON资源
    QT事件过滤器(QT事件处理的5个层次:自己覆盖或过滤,父窗口过滤,Application过滤与通知)
    QMetaObject感觉跟Delphi的类之类有一拼,好好学一下
    POJ 1013 小水题 暴力模拟
    WMDestroy函数调用inherited,难道是为了调用子类覆盖函数?还有这样调用的?
    技术资深、还关注市场的几率较高
    有感,懂市场比懂产品重要,懂产品比懂技术重要——想起凡客诚品和YY语音了
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349199.html
Copyright © 2011-2022 走看看