替换字符,但排除使用正则表达式的单词

pop*_*top 3 regex

我正在处理一个问题,例如,有一个句子:“今天_asf是null_word day__和__bla__bla ”。我想得到的是一个句子,其中所有的_都用空格代替,但null_word中除外。因此,输出语句应如下所示:“今天asf是null_word日,bla bla”。

为此,我编写了一个redux表达式:

 (\w*((?!null_word)\b\S+)[_]+\w*)
Run Code Online (Sandbox Code Playgroud)

此表达式选择所有使用_ char的单词,并排除null_word。但是现在,如何从这些组中选择所有_字符?

我尝试用以下方法将它们分开:

 (\w*((?!null_word)\b\S+)[_]+\w*)[_]
Run Code Online (Sandbox Code Playgroud)

但示例结果是:day__

谢谢您的帮助!

The*_*ird 5

您可以在后面使用否定的后缀来断言左侧直接不为null

(?<!\bnull)_+
Run Code Online (Sandbox Code Playgroud)
  • (?<! 负向后看,断言直接在左侧的不是
    • \bnull 匹配单词边界,后跟 null
  • ) 往后看
  • _+ 比赛1次以下,

正则表达式演示

在替换中使用空格。

如果要精确保留,null_word也可以在捕获组中将其匹配以保留它,并匹配下划线以将其删除。

然后在替换使用捕获组1中。

(\bnull_word\b)|_+
Run Code Online (Sandbox Code Playgroud)

正则表达式演示 | Python演示

  • 谢谢,我什至没有想到要解决这样的问题。谢谢! (2认同)
  • @poppytop在python中,捕获组为\ 1。请参见以下示例https://ideone.com/Vmamvg (2认同)