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

时间:2010-07-23 01:08:18

标签: python regex

我试过这个斜体:

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

但它不起作用,因为我相信正则表达式中的任何人都会立即知道。

2 个答案:

答案 0 :(得分:2)

如果你改变替换的顺序,那将很容易。首先处理大胆的案例会阻止斜体接管。

答案 1 :(得分:1)

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

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>'
相关问题