15.2.2 匹配任意一个单个的字符(.): 点字符或菊花(.) 符号匹配除换行符(NEWLINE) 外的任意一个单个字符 (Python的正则表达式有一个编译标识[S or DOTALL],该标识能去掉这个限制 使(.) 在匹配时包括换行符(NEWLINEs)) 正表达式模式 匹配的字符串 import re a="foo" if (re.match("f.o",a)): print '1111' C:\Python27\python.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\no" if (re.match("f.o",a)): print '1111' C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py Process finished with exit code 0 15.2.4 从字符串的开头或结尾或单词边界开始匹配( ^/$ /\b /\B ) import re a="xxxfo" if (re.search("fo",a)): print '1111' C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py 1111 import re a="xxxfo" if (re.search("^fo",a)): print '1111' C:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py 1111 字符"z" 后面跟任意一个字符,然后是一个十进制数字 import re a="z" if (re.search("[^aeIoU]",a)): print '1111' C:\Python27\python.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:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py 1111 加号(+) 操作符匹配它左边那个正则表达式至少出现一次的情况 import re a="a" if (re.search("[aeIoU]+",a)): print '1111' C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py 1111 import re a="aib" if (re.search("[aeIoU]+b",a)): print '1111' C:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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.匹配子组 有时你需要对正则表达式进行分组,其中一个很好的例子就是,你要用两个不同的正则表达式去比较一个字符串。 另一个理由是为整个正则表达式添加一个重复操作符