使用多行反向负向前瞻删除选定的字符分隔段落

时间:2017-11-22 11:24:05

标签: python regex python-3.x regex-negation

我有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

是否有可能以某种方式反转这种负面的前瞻并打印不匹配的行?

0 个答案:

没有答案