首页 > 解决方案 > Python Re:在固定表达式中替换未知数量的表达式

问题描述

我想使用 python re 模块替换未知数量的表达式,这些表达式总是落在两个表达式之间,以便任何以between开头和</w:t>结尾的表达式都被替换。到目前为止,我有:<w:t>{{}}

    import re
    a = re.compile(r'</w:t>.*?<w:t>')
    a.sub('', 'input_string')

我认为该模式可能过于贪婪,但主要问题是我想替换任何与该模式匹配的表达式的零个或多个实例,前提是它介于{{and之间}}。请有人指出我正确的方向。

标签: pythonregex

解决方案


您可以匹配 and 之间的所有子字符串,{{}}仅在匹配项中删除所有出现的第二个模式:

input_string = re.sub(r'(?s){{.*?}}', lambda x: re.sub(r'(?s)</w:t>.*?<w:t>', '', x.group()), input_string)

(?s){{.*?}}则表达式匹配{{,任何 0+ 字符尽可能少到最左边}},包括它们,然后在</w:t>和之间的所有子字符串仅在替换<w:t>匹配的内部被删除。lambda x: re.sub(r'(?s)</w:t>.*?<w:t>', '', x.group())


推荐阅读