如何用正则表达式替换不同panel标签为对应标题文本?
解决Panel标签替换为对应标题的问题
待处理文本:
text = "bla bla bla {panel:title=Realisation|borderStyle=dashed|borderColor=#cccccc|titleBGColor=#a39d9d} bla bla bla {panel:title=Definition of Done|borderStyle=dashed|borderColor=#cccccc|titleBGColor=#a39d9d} bla bla需求:将每个
{panel:title=XXX|...}格式的标签替换为对应的XXX(即title属性的值)。
尝试的错误代码
def del_tags(text): if text: CLEANR = re.compile('{panel.*?}') try: TITLES = re.search('title\=(.+?)\|', text).group(1) except AttributeError: TITLES = "" cleantext = re.sub(CLEANR, TITLES, text) return cleantext else: return text
问题:所有标签都被替换成了Realisation。
问题原因
代码仅从整个文本中提取了第一个匹配到的title值,之后用这个固定值替换所有panel标签,导致所有标签内容一致。
正确解决方案
使用正则替换的回调函数,对每个匹配到的panel标签单独提取title值:
import re def del_tags(text): if not text: return text def replace_panel(match): # 从当前匹配的标签中提取title title_result = re.search(r'title=(.+?)\|', match.group(0)) return title_result.group(1) if title_result else "" # 匹配所有panel标签,逐个调用回调函数替换 return re.sub(r'{panel.*?}', replace_panel, text)
测试结果
调用函数后,输出如下:
bla bla bla Realisation bla bla bla Definition of Done bla bla
内容的提问来源于stack exchange,提问作者De1f
相关产品推荐
相关产品推荐

