【问题标题】:Regex replacement with OR condition用 OR 条件替换正则表达式
【发布时间】:2020-05-01 03:49:27
【问题描述】:

我有一个用空格和 OR 条件分隔的字符串(千位)列表,例如:

Ani mal|Hu man|Pl ant|Fu ngus

我想去掉空格,但这些字符串在一个巨大的文本 (XML) 中,有很多有意的空格。所以我不能只删除所有空格。我试过了:

(Ani) (mal)|(Hu) (man)|(Pl) (ant)|(Fu) (ngus) 用。。。来代替: $1$2

显然这不起作用。我知道我可以用任何编程语言来做到这一点,但我想看看是否有办法只用 Regex 来做到这一点(例如在 Notepad++ 中)。

【问题讨论】:

  • 使用(?|(Ani) (mal)|(Hu) (man)|(Pl) (ant)|(Fu) (ngus)),替换为$1$2

标签: regex notepad++ regexp-replace


【解决方案1】:

当您对每个备选方案有固定数量的组,并且您想使用 reset 索引来引用每个备选方案中的捕获值(组)时,您可以利用branch reset group

(?|(Ani) (mal)|(Hu) (man)|(Pl) (ant)|(Fu) (ngus))
^^^  1     2  ^ 1     2  ^  1    2  ^  1     2  ^    

替换为$1$2。由于(?|...) 组,内部的所有替代项都有具有相同索引的组。

请参阅regex demo online

Notepad++ 设置和演示:

【讨论】:

  • 非常感谢!我不知道正则表达式中的这种可能性!
【解决方案2】:

只是想找到替代方案,我想我明白了..
查找内容:(?<=Ani|Hu|Pl|Fu) (?=\w+)
替换为:nothing

【讨论】:

  • 这将替换Ab cd 中不需要的空格。
  • 是的。可能是,但我更新了我的答案,这肯定只会影响预期的字符串....♥
猜你喜欢
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2010-09-16
  • 2020-02-25
  • 1970-01-01
  • 2019-02-07
  • 2012-06-10
相关资源
最近更新 更多