import re
一次性的快速检查,可以用:
matchobj = re.match(r"regex",subject)
matchobj.group()
matchobj.group(1) 或 match group('name')
matchobj.groups() #所有捕获
matchobj.groupdict() * 字典形式
若想重复用一个正则表达式,则需要使用一个编译过的对象:
reojb = re.compile(r"regex")
reojb.match(subject)
match() , search()类似,区别是match()只从目标字符串开始处进行检查,而search()只要包括即可。
match()部分匹配也接受,若要求全部匹配,则需正则式加\Z
找到所有:
result = re.findall(regex, subject)
替换:
result = re.sub("before", "after", subject)
例子:
处理HTML中粗体数字,<b>2<\b>34<b>567<\b>,匹配2 5 6 7
list = []
innerre = re.compile(r"\d+")
for outermatch in re.finditer("(?s)<b>(.*?)<\b>",subject):
list.append(innerre.findall(outermatch.grouop(1)))
以上的任务可以通过一串正则表示:\d+(?=(?:(?!<b>).)*<\b>)
很夸张,正则不善于处理逻辑,所以最好还是使用两个简单正则,使用过程代码来组合它们
例子:
匹配被等号分割的单词对,并交换它们的位置
result = re.sub(r"(\w+)=(\w+)", r"\2=\1", subject)
或者
reobj = re.complie(r"(\w+) = (\w+)")
result = reobj.sub(r"\2 = \1", subject)
例子:
匹配文字中的数字,乘2后,替换原数字
def computereplacement(matchobj):
return str(int(matchobj.grouop())*2)
result = re.sub(r"\d+", computereplacement, subject)
180P