Python里的正则表达式re:
pattern:匹配模式,遵循正则表达式语法
method:匹配方法,search/match/split/findall/finditer/sub/subn
re模块介绍
re.search:搜索字符串,找到匹配的第一个字符串
re.match:从字符串开始开始匹配
re.split:使用正则表达式来分隔字符串
re.findall:根据正则表达式从左到右搜索匹配项,返回匹配的字符串列表
re.finditer:根据正则表达式从左到右搜索匹配项,返回一个迭代器返回MatchObject
re.sub:字符串替换
re.subn:与sub一样,返回值多替换的字符串个数
re.group:返回匹配组:索引0表示全部匹配的字符串,索引1开始表示匹配的子组
re.groupdict:返回命名组的字典
re.groups:返回匹配的子组,索引从1开始的所有子组
操作解说示例:
re_demo(): txt=m=.search(,txt) m.groups() re_method(): s=.search(,s) .match(,s) .match(,s)re_method_2(): s=.split(,s)re_method_3(): s1=s2=.findall(,s1).findall(,s2) re_method_4(): s2 = i=.finditer(,s2) m i: m.group() re_method_5(): s2 = .sub(,,s2) .subn(, , s2) re_method_6(): data=m=.match(,data) m.group(,,) m.groups()__name__==:
re_method_6()
样例:
#!/usr/bin/env python # -*- coding: utf-8 -*- import re def re_pattern_syntax(): #dot,caret,$ # */+/? # * 表示匹配0个到都哦个 # ab+ 表示匹配1个或多个的b # ? 表示匹配0到1个 print re.match(r'.*','abc\nedf').group() #点表示任意一个字符,*任意多少个,只能匹配一行字符,碰到\表示换行符号不再匹配 print re.match(r'.*','abc\edf',re.DOTALL).group() #通过加re.DOTALL,这个点不仅仅表示任意字符还可以表示换行符 print re.findall(r'^abc','abc\habc') print re.findall(r'^abc', 'abc\habc',re.MULTILINE) #re.MULTILINE把字符串当多行来处理,碰到回车符当另外一行处理 print re.findall(r'abc\d$','abc1\habc2')#$表示匹配一个字符串的结束 print re.findall(r'abc\d$','abc1\habc2',re.MULTILINE)#$表示匹配一个行的结束 print re.match(r'ab*','a') print re.match(r'ab+','abd') print re.match(r'ab?','abc').group() #greedy/non-greedy 贪婪和非贪婪 #{m} 匹配次数 #转义字符\用来匹配特殊字符 #[]集合 s='<H1>title</H1>' print re.match(r'<.+>',s).group()#默认用贪婪模式匹配 print re.match(r'<(.+)>',s).group(1)#基于贪婪模式,打印出它的 group print re.match(r'<(.+?)>',s).group()#表示用非贪婪模式匹配任意字符 print re.match(r'<(.+?)>', s).group(1) print re.match(r'ab{2,4}','abbbbbb').group() #这样也是属于贪婪模式尽量的匹配多 print re.match(r'ab{2,4}?', 'abbbbbb').group()#这样是非贪婪模式匹配,尽量匹配少 print re.search(r'','The price is $9.9').groups()#若要匹配$匹配符号,不加、当作结束符号来处理, print re.search(r'\$', 'The price is $9.9').groups() print re.search(r'0[xX]([0-9A-Fa-f]{6})','The hex value is 0xFF03D6').groups() if __name__=='__main__': re_pattern_syntax() ####一些特殊字符的使用 #!/usr/bin/env python # -*- coding: utf-8 -*- import re def re_pattern_syntax(): #\number 表示前一个匹配组 print re.search(r'(\d)(\d)(\d)\1\2\3','135135').groups() print re.search(r'(\d)(\d)(\d)\1\2\3','135135').groups() print re.search(r'(\d{3}) \1', '135 135').groups() #\d\D 匹配一个连字符\匹配非连字符 #\b匹配单词的开头和结尾 print re.search(r'(\d{3}-\d{4}-\d{4})','157-5923-2692').groups() print re.search(r'(\d{3}-\d{4}-\d{4})', '157-5923-2692').groups() print re.search(r'\b(\d{3}-\d{4}-\d{4})\b', '157-5923-2692').groups()#不合法的是无法匹配出来的 print re.search(r'(\d{3}\D\d{4}\D\d{4})', '157-5923-2692').groups() #\s\S 空格\非空格 \f换页 \v垂直制表 print re.search(r'(\d{3}\s\d{4}\s\d{4})', '1570 5923 2692').groups() print re.search(r'(\d{3}\S\d{4}\S\d{4})', '1570-5923-2692').groups() #\w\W 匹配字符和非字符 print re.match(r'(\w+)\s*:\s*(\w+)', 'Name: Joey').groups() #或略大小写 print re.match(r'(Name)\s*:\s*(\w+)', 'NAME: Joey',re.IGNORECASE).groups() #re.VERBOSE 注释/re.compile s='the number is 20.33' r=re.compile(r''' \d+ #整数部分 \.? #小数部分 \d* #小数部分,可选 ''',re.VERBOSE) print re.search(r,s).group()