这似乎是一个容易出问题的问题,但显然我有些遗漏。
我有一个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
但它不是用格式化的替换替换代码,返回的字符串与输入相同。我错过了什么?
答案 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()
的第二个参数是一个函数,它将匹配对象作为输入,并且应该返回替换字符串。