我试过这个斜体:
r = re.compile(r"(\*[^ ]+\*)")
r.sub(r'<i>"\1"</i>', foo)
但它不起作用,因为我相信正则表达式中的任何人都会立即知道。
答案 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>'