如何匹配另一次匹配后的所有出现的情况?
例如:我想用空格替换-
后面的所有内容。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 Lookbehind
Notepad++ 似乎不支持
谢谢。
附言:请随意修改标题。我尽力了,但我不是母语人士。
答案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
您需要注意以下警告:
- 所有想要的(替换)的出现
-
都位于最后一次出现的之后abc
。 (-([^-]*))?
-
正则表达式的一部分在一行中重复的次数等于或超过最大次数。- 每行末尾都会有多余的空格,其
-
出现次数少于(-([^-]*))?
正则表达式中的计数 - 替换表达式中后面的数字
$
从 1 开始,每次出现都 +2(-([^-]*))?
。
在线尝试此正则表达式https://regex101.com/r/BRJjEx/1