Python RegEx匹配多行子字符串,但不会替换它

时间:2012-11-12 22:02:21

标签: python regex

这似乎是一个容易出问题的问题,但显然我有些遗漏。

我有一个Python函数,旨在用HTML格式的代码替换自定义标记之间发生的代码块:

def subCode(text):
    tags = re.findall('<<<mytag>>>.+?<<</mytag>>>', text, re.S)
    for tag in tags:
        match = re.search('>>>(.+?)<<<', tag, re.S)
        replaced_code = replaceCode(match.group(1))
        text = re.sub(tag, replaced_code, text, re.S|re.M)
    return text

这将匹配标签之间的代码,例如:

this is some 
random text
<<<mytag>>>now this
   is some
   random code<<</mytag>>>
and this is text again

但它不是用格式化的替换替换代码,返回的字符串与输入相同。我错过了什么?

1 个答案:

答案 0 :(得分:4)

我认为你想使用re.sub()的变体,它将函数作为第二个参数,它更简单:

def subCode(text):
    return re.sub('<<<mytag>>>(.+?)<<</mytag>>>', replaceFunc, text, flags=re.S)

def replaceFunc(match):
    return replaceCode(match.group(1))

如果re.sub()的第二个参数是一个函数,它将匹配对象作为输入,并且应该返回替换字符串。