我有input string
:
string = '''p1 = {
s,
},
p2 = {
{s,
},
p3 = {
s,
},
p2 = {
}s,
},'''
我正在尝试替换以p2 = {
开头并以},
结尾的所有段落,最后得到这个新的预期output string
:
p1 = {
s,
},
p3 = {
s,
},
我可以通过循环遍历行而不使用正则表达式来实现这一点。但是我怎么用正则表达式来做呢?
使用re.subn的此方法无法替代,我不明白为什么不:
import re
repl = ''
pattern = r'p2 = {.*?},'
new_string, number_of_subs_made = re.subn(pattern, repl, string,
re.MULTILINE|re.DOTALL)
使用re.findall的方法似乎能够找到所有匹配项:
import re
pattern = r'.*?(p2 = {.*?},).*?'
m = re.findall(pattern, string, re.MULTILINE|re.DOTALL)
print('\n'.join(m))
打印此输出:
p2 = {
{s,
},
p2 = {
}s,
},
有关如何模仿grep -v
并排除模式匹配的行的问题,答案建议使用否定前瞻:Regular expression to match a line that doesn't contain a word?
这里有一个关于如何在多行中使用负向前瞻的问题: Regex with negative lookahead across multiple lines
是否有可能以某种方式反转这种负面的前瞻并打印不匹配的行?