Python正则表达式替换包含字符串的双换行分隔段

eya*_*ler -2 python regex

将段落定义为两边用双新行('\n \n')分隔的多行字符串.如果存在包含某个字符串('BAD')的段落,我想用一些其他标记('GOOD')替换该段落(即包含BAD的任何文本,直到最接近的前一行和后面的双重换行符).这应该是一个python 3正则表达式.

我有这样的文字:

dfsdf\n
sdfdf\n
\n
blablabla\n
blaBAD\n
bla\n
\n
dsfsdf\n
sdfdf
Run Code Online (Sandbox Code Playgroud)

应该:

dfsdf\n
sdfdf\n
\n
GOOD\n
\n
dsfsdf\n
sdfdf
Run Code Online (Sandbox Code Playgroud)

Seb*_*icz 5

这个给你:

/\n\n(?:[^\n]|\n(?!\n))*BAD(?:[^\n]|\n(?!\n))*/g
Run Code Online (Sandbox Code Playgroud)

好吧,把它分解一下(因为看起来很讨厌):

  • \n\n 匹配两个文字换行符.
  • (?:[^\n]|\n(?!\n))*是一个非捕获组,它匹配单个非换行符或换行符后面没有的换行符.我们重复整个组0次或更多次(如果BAD出现在段落的开头).
  • BAD将匹配您想要的文字文本.很简单.
  • 然后我们使用与上面相同的结构,以匹配段落的其余部分.

然后,你只需要替换它\n\nGOOD,然后你即可参加比赛.

在Regex101上演示