【问题标题】:Replace all text except "pattern" using regex使用正则表达式替换除“模式”之外的所有文本
【发布时间】:2017-10-26 19:00:44
【问题描述】:

我有一个软件,给定一个正则表达式,可以执行查找和替换。它不是一种编码语言,因此除了正则表达式之外没有其他建议有用。我一直在寻找一个可以帮助我找到所有文本 except“模式”的表达式。模式不一定在字符串的开头或结尾,并且可以出现多次。给定字符串:

red blue yellow green orange purple blue black green white

和一个模式:

blue.*?green

一个出现两次的模式,我试图选择除此之外的所有内容。 (以删除选定的并只留下模式)。 我试过了:

FIND - ".*?(blue.?green)" 
REPLACE - "$1", 

但最后仍然留下“白色”。任何帮助,将不胜感激。

【问题讨论】:

  • 我认为.? 是一个错字,应该是.+?。如果您不使用 .*?这给了你什么?通过消除过程,您最后需要一个.*? 对吗?嗯,几乎是对的。正则表达式末尾的.*? 不会匹配任何内容,因为它不必匹配。另一方面,.* 会匹配。我想最大的问题是为什么你在开头使用.*? 而不是.*。如果蓝色和绿色是分隔符,那么 first 和 last found 呢?
  • 抱歉,是的,这是一个错字。如果你去掉开头的“.*?”它只是将模式替换为自身 - 因此不会更改文本。如果我在前面使用 .* - 它是贪婪的并且匹配所有内容直到第二个实例 - 所以你失去了第一个模式匹配。

标签: regex replace find


【解决方案1】:

通常是这样的

查找(?:(?!blue.*?green).)*(blue.*?green)?
替换$1

展开

 (?:
      (?! blue .*? green )
      . 
 )*
 ( blue .*? green )?           # (1)

输出

blue yellow greenblue black green

【讨论】:

  • 效果很好!谢谢sln。我一直在殴打自己将近一天,试图弄清楚那个。现在我只需要坐下来弄清楚它是如何工作的,但我可以做到。再次感谢伙计。
猜你喜欢
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
相关资源
最近更新 更多