Python中的条件正则表达式替换

时间:2014-06-24 18:14:39

标签: python regex

我有这样的正则表达式

value = ">>897897"
rep = "<div> \\1 </div>"
pat = "&gt;&gt;(\\d+)"
res = re.sub(pat, rep, value)

但现在我想添加一个条件,当数字等于某个数字时,如50,它使用不同的替代。

例如,如果匹配等于50:

使用

rep = "<p> \\1 </p>"

而不是

rep = "<div> \\1 </div>"

2 个答案:

答案 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'