如何在Notepad ++中替换组群RegExp

时间:2017-11-03 16:12:15

标签: regex replace notepad++

我有一些这样的文字:

1|Some things|US|192||||||1||
2|Some other things|US|128|3|||5|1|1|3|
3|Whatever else|US|128||15||||||

我想在Notepad ++中用以下内容替换它:

1|Some things|US|192|+++++1++
2|Some other things|US|128|3+++5+1+1+3+
3|Whatever else|US|128|+15++++++

但我找不到一些合适的方法来做到这一点。我设法构建了一个匹配字符串US\|(\d+)\|((\d*)\|)+的RegExp,但我找不到如何构建替换字符串以匹配这种组组方法。

对我来说,困难的部分是排除“美国”之后的第一个数字。我能看到的唯一出路就是将(?<![a-zA-Z])\|(?![a-zA-Z])替换为+,然后将US\|(\d+)\+替换回US|\1|

是否可以使用Notepad ++的内置或TextFX的替换工具进行替换?

1 个答案:

答案 0 :(得分:4)

您可以使用此模式:

(?:\G(?!^)|\|US\|\d+\|)\d*\K\|

+作为替换字符串。

对于每一行,情况都是相同的:

  • 第一个匹配使用交替的第二个分支:\|US\|\d+\|并匹配第一个管道
  • 其他匹配使用第一个分支和\G锚来确保连续性。
  • 当到达最后一个管道时,连续性被打破,第一个分支不能再成功。

\K功能会从匹配​​结果中删除所有先前匹配的字符,并且仅替换管道。