我有这样的正则表达式
value = ">>897897"
rep = "<div> \\1 </div>"
pat = ">>(\\d+)"
res = re.sub(pat, rep, value)
但现在我想添加一个条件,当数字等于某个数字时,如50,它使用不同的替代。
例如,如果匹配等于50:
使用
rep = "<p> \\1 </p>"
而不是
rep = "<div> \\1 </div>"
答案 0 :(得分:3)
是的,您可以使用函数作为替换函数并在那里进行条件检查:
def check(match):
g = match.group(1) # group(1) or any group number you have
if g == '50':
return '<p>%s</p>' % g
else:
return '<div>%s</div>' % g
res = re.sub(pat, check, value)
答案 1 :(得分:2)
您可以在re.sub中使用函数而不是替换模式。该函数将传递匹配对象。例如:
re.sub(r'(\d+)', lambda m: "-" + m.group(0) + "-" if m.group(0) != "50" else "*"+m.group(0)+"*", "a 50 b")
# gives 'a *50* b'
re.sub(r'(\d+)', lambda m: "-" + m.group(0) + "-" if m.group(0) != "50" else "*"+m.group(0)+"*", "a 64 b")
# gives 'a -64- b'