连续的、冲突的正则表达式替换

2024-04-18 22:15:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试过用斜体字:

r = re.compile(r"(\*[^ ]+\*)")
r.sub(r'<i>"\1"</i>', foo)

但它不起作用,因为我相信正则表达式中的任何人都会马上看到。你知道吗


Tags: refoocompile斜体字
2条回答

你的正则表达式和替换需要一些调整。你知道吗

r = re.compile(r"(\*[^ ]+\*)")

你在这里捕捉的东西太多了星号被保存在\1。你知道吗

r.sub(r'<i>"\1"</i>', foo)

你在这里替换得有点太多了,双引号包括在替换中。示例:

r.sub(r'<i>"\1"</i>', '*foo*')  # -> '<i>"*foo*"</i>'

尝试以下操作:

foo = '***foo***'
bold = re.compile(r'''\*\*([^ ]+)\*\*''')
ital = re.compile(r'''\*([^ ]+)\*''')

ital.sub(r'''<i>\1</i>''', bold.sub(r'''<b>\1</b>''', foo)) # '<b><i>foo</i></b>'

如果你改变替换的顺序,它很容易工作。首先处理粗体字将防止斜体字取代。你知道吗

相关问题 更多 >