如何使用正则表达式匹配单词之间的文本?

时间:2018-03-03 12:22:45

标签: python regex

我想在Python中预处理器定义之间匹配文本文本。

在这个例子中,我想匹配删除文本,以便删除第2..4行,例如:

#if 1
#  if 0
Remove me
#  endif
Keep me
#endif

使用此正则表达式,它会删除文字,但.*不会在第一个#endif停止:

def remove_if0(string):
    pattern = r"(^\s*#\s*if\s+0\b.*^\s*#\s*endif\b)"
    regex = re.compile(pattern, re.MULTILINE | re.DOTALL)
    return regex.sub("", string)

有没有办法在没有DOTALL阅读过期的情况下匹配对?例如^\s*#\s*endif\b

我尝试了(?!word),例如:(?!^\s*#\s*endif\b)* - 但它没有用。

1 个答案:

答案 0 :(得分:2)

解决方案是使用ungreedy .*?(感谢@ bobble-bubble)

这是一个有效的Python函数:

def remove_if0(string):
    pattern = r"(^\s*#\s*if\s+0\b.*?^\s*#\s*endif)"
    regex = re.compile(pattern, re.MULTILINE | re.DOTALL)
    return regex.sub("", string)