我有一些这样的文字:
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*)\|)+
但我找不到如何构建替换字符串来匹配这种组组方法。
对我来说最困难的部分是排除“US”之后的第一个数字。我能看到的唯一出路是替换 (?<![a-zA-Z])\|(?![a-zA-Z])
对于 +
然后替换 US\|(\d+)\+
返回US|\1|
.
是否可以使用Notepad++的内置或TextFX的替换工具进行这样的替换?
最佳答案
您可以使用此模式:
(?:\G(?!^)|\|US\|\d+\|)\d*\K\|
使用 +
作为替换字符串。
对于每一行,场景都是相同的:
- 第一个匹配使用交替的第二个分支:
\|US\|\d+\|
并匹配第一个管道 - 其他匹配使用带有
\G
anchor 的第一个分支,以确保连续性。 - 当到达最后一个管道时,连续性被破坏,第一个分支不能再成功。
\K
功能会从匹配结果中删除所有先前匹配的字符,并且仅替换管道。
关于regex - 如何在 Notepad++ 中替换组的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47100096/