用python正则表达式匹配字符串的方法:
为桥西等地区用户提供了全套网页设计制作服务,及桥西网站建设行业解决方案。主营业务为做网站、成都网站建设、桥西网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!1.单个位置的字符串匹配
这种情况我们可以使用这个(.+?)正则表达式来提取. 举例,一个字符串"a123b",如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list,代码如下:
import re str = "a123b" print re.findall(r"a(.+?)b",str)# 输出['123']
1.1贪婪和非贪婪匹配
如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用?来控制正则贪婪和非贪婪匹配的情况. 代码如下:
import re str = "a123b456b" print re.findall(r"a(.+?)b", str) #输出['123']#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况 print re.findall(r"a(.+)b", str) #输出['123b456'] print re.findall(r"a(.*)b", str) #输出['123b456']
1.2多行匹配
如果你要多行匹配,那么需要加上re.S和re.M标志. 加上re.S后, .将会匹配换行符,默认.不会匹配换行符. 代码如下:
str = "a23b\na34b" re.findall(r"a(\d+)b.+a(\d+)b", str) #输出[] #因为不能处理str中间有\n换行的情况 re.findall(r"a(\d+)b.+a(\d+)b", str, re.S) #s输出[('23', '34')]
加上re.M后,^$标志将会匹配每一行,默认^和$只会匹配第一行. 代码如下:
str = "a23b\na34b" re.findall(r"^a(\d+)b", str) #输出['23'] re.findall(r"^a(\d+)b", str, re.M) #输出['23', '34']
2. 连续多个位置的字符串匹配
这种情况我们可以使用(?P
import re line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"' reg = re.compile('^(?P[^ ]*) (?P [^ ]*) "(?P [^"]*)" (?P [^ ]*) (?P [^ ]*) "(?P [^"]*)" "(?P [^"]*)"') regMatch = reg.match(line) linebits = regMatch.groupdict() print linebits for k, v in linebits.items() : print k+": "+v
输出的结果为:
status: 200 referrer: request: GET /api HTTP/1.1 user_agent: Mozilla/5.0 date: 25/Oct/2012:14:46:34size: 44 remote_ip: 192.168.0.1
以上就是如何用python正则表达式匹配字符串?的详细内容,更多请关注创新互联其它相关文章!