将段落定义为两边用双新行('\ n \ n')分隔的多行字符串。如果存在包含某个字符串('BAD')的段落,我想用一些其他标记('GOOD')替换该段落(即包含BAD的任何文本,直到最接近的前后双线)。这应该是一个python 3正则表达式。
我的文字如下:
dfsdf\n
sdfdf\n
\n
blablabla\n
blaBAD\n
bla\n
\n
dsfsdf\n
sdfdf
应该是:
dfsdf\n
sdfdf\n
\n
GOOD\n
\n
dsfsdf\n
sdfdf
答案 0 :(得分:5)
你在这里:
/\n\n(?:[^\n]|\n(?!\n))*BAD(?:[^\n]|\n(?!\n))*/g
好的,稍微分解一下(因为它看起来很讨厌):
\n\n
匹配两个文字换行符。(?:[^\n]|\n(?!\n))*
是一个非捕获组,它匹配单个非换行符或者不跟随另一个换行符的换行符。我们重复整个组0次或更多次(如果BAD
出现在段落的开头)。BAD
将匹配您想要的文字文字。很简单。然后,您只需将其替换为\n\nGOOD
,即可参加比赛。
答案 1 :(得分:4)
首先,您在示例中混合了实际换行符和'\n'
字符,我假设您只是意味着。其次,让我挑战你的假设你需要正则表达式:
inp = '''dfsdf
sdadf
blablabla
blaBAD
bla
dsfsdf
sdfdf'''
replaced = '\n\n'.join(['GOOD' if 'BAD' in k else k for k in inp.split('\n\n')])
结果是
print(replaced)
'dfsdf\nsdadf\n\nGOOD\n\ndsfsdf\nsdfdf'