python使用正则表达式
re.search
searchObj = re.search( r'正则表达式', line, flag)
if searchObj:
print "searchObj.group() : ", searchObj.group() #查看匹配到的字符串
print "searchObj.group() : ", searchObj.group(1) #查看第一个捕获组的内容
print "searchObj.group() : ", searchObj.span() #查看在字符串中的下标位置
else:
print "Nothing found!!"
re.match与re.search类似,区别在于re.match只从字符串开头进行匹配。
可选的flag如下:
如果想用多个标志就使用|连接多个flag。
re.sub
re.sub(pattern, repl, string, count=0, flags=0)
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
使用函数的示例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
# 将匹配的数字乘以 2
def double(matched):
value = int(matched.group('value'))
return str(value * 2)
s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))
re.compile
pattern = re.compile(r'\d+') # 用于匹配至少一个数字
m = pattern.match('one12twothree34four') # 查找头部,没有匹配
m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配
当用同样的正则表达式匹配多个字符串时,使用起来比较方便。
re.findall
result = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result)
结果为[('width', '20'), ('height', '10')]
这样的元组列表。
re.split
re.split(pattern, string[, maxsplit=0, flags=0])
根据匹配到的字符串进行split,maxsplit表示分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
匹配到的match对象
- group([group1, …]) 方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用 group() 或 group(0);
- start([group]) 方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;
- end([group]) 方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;
- span([group]) 方法返回 (start(group), end(group))。