在以下字符串中,我想用BeginHello...EndHello
替换所有包含haha
的{{1}}块:
''
此代码:
s = """BeginHello
sqdhaha
fsqd
EndHello
BeginHello
1231323
EndHello
BeginHello
qsd
qsd
haha
qsd
EndHello
BeginHello
azeazezae
azeaze
EndHello
"""
在这里不起作用:不会删除任何内容。
如何在Python import re
s = re.sub(r'BeginHello.*haha.*EndHello', '', s)
print s
上将这种正则表达式用于多行模式?
答案 0 :(得分:1)
我们可以尝试使用以下模式进行匹配:
BeginHello((?!\bEndHello\b).)*?haha.*?EndHello
这与首字母BeginHello
相匹配。然后,它使用一个回火点:
((?!\bEndHello\b).)*?
消耗任何东西,只要我们不击中EndHello
。该点也是惰性的,将在击中haha
之前停止。有效地,使用上面的点意味着我们只会消耗而不击中EndHello
或haha
。然后,假设到目前为止匹配成功,我们将消耗haha
,然后消耗最近的EndHello
。
s = re.sub(r'BeginHello((?!\bEndHello\b).)*?haha.*?EndHello', '', s,
flags=re.DOTALL)
print s
BeginHello
1231323
EndHello
BeginHello
azeazezae
azeaze
EndHello
答案 1 :(得分:-1)
您想要re.DOTALL
。这基本上允许.
匹配包括\n
import re
s = re.sub(r'BeginHello.*?haha.*?EndHello', '', s, flags=re.DOTALL)
print s