Notepad++ Regex:匹配另一次匹配后的所有出现

Notepad++ Regex:匹配另一次匹配后的所有出现

如何匹配另一次匹配后的所有出现的情况?

例如:我想用空格替换-后面的所有内容。abc

输入:

one-two-abc-three-four-five
six-seven-abc-eight-nine-ten
...

输出:

one-two-abc three four five
six-seven-abc eight nine ten
...

在 Javascript 中可以使用这个正则表达式:(?<=(.+abc.+))-,但是Positive LookbehindNotepad++ 似乎不支持

谢谢。

附言:请随意修改标题。我尽力了,但我不是母语人士。

答案1

这适用于字符串中任意数量的连字符。

  • Ctrl+H
  • 找什么:(?:^.*abc|\G[^-\r\n]+)\K-
  • 替换为:#一个空格
  • 查看 相符
  • 查看 环绕
  • 查看 正则表达式
  • 取消选中 . matches newline
  • Replace all

解释:

(?:             # non capture group
  ^             # beginning of line
    .*          # 0 or more any character but newline
    abc         # literally abc
  |           # OR
    \G          # restart from last match position
    [^-\r\n]+   # 1 or more any character that is not hyphen or line break
)               # end group
\K              # forget all we have seen until this position
-               # hyphen

截图(之前):

在此处输入图片描述

截图(之后):

在此处输入图片描述

答案2

我找到了这个解决方案。

Find:
^(.+abc)(-([^-]*))?(-([^-]*))?(-([^-]*))?(-([^-]*))?(-([^-]*))?(-([^-]*))?$

Replace:
$1 $3 $5 $7 $11 $13

您需要注意以下警告:

  1. 所有想要的(替换)的出现-都位于最后一次出现的之后abc
  2. (-([^-]*))?- 正则表达式的一部分在一行中重复的次数等于或超过最大次数。
  3. 每行末尾都会有多余的空格,其-出现次数少于(-([^-]*))?正则表达式中的计数
  4. 替换表达式中后面的数字$从 1 开始,每次出现都 +2 (-([^-]*))?

在线尝试此正则表达式https://regex101.com/r/BRJjEx/1

相关内容