eclipse - 正则表达式:替换多个组

Gar*_*gos 5 regex eclipse replace

someText
1
2
3
4
moreText
Run Code Online (Sandbox Code Playgroud)

我想在每个数字之前添加一个前缀.

但是使用(\w+\R)(\d+\R)+(\w+)并且\1prefix\2\3只会在最后一位数字前加上并删除其他数字.

有没有办法用一个正则表达式做或者我应该在旁边写一个脚本?

Tim*_*her 5

你的正则表达式的问题是使用贪婪匹配(\d+\R)+,特别是最后一次+.这就是说,"尽可能多次匹配这个群体,只要它不会导致错过匹配".因此,对于你的文本,它会吞噬1,2,3和4,然后再不再吞噬并将最后一个匹配放入第二个捕获组.显然,正则表达式引擎的性质无法表达可变组,无论如何你会如何解决它们?所以简短的回答,我认为正则表达式是完全自动化过程的错误工具,你必须编写一个脚本.

但是,对于一个稍微不那么自动化的过程仍然包含您的周围文本,您可以尝试

find: (\w+\R)((?:\d+\R)+)(\w+)
replace: \1prefix\2\3
Run Code Online (Sandbox Code Playgroud)

我们将第二组加上它的贪婪修饰符包装在一组额外的捕获parens中,并将实际匹配的文本包含在非捕获组中.现在,我们在他们自己的组中拥有完整的数字集,并可以将前缀添加到第一个.这有趣的副作用是,第一个数字然后匹配第一个组(\w+\R),如果再次运行查找/替换,它会命中行中的下一个数字,直到它不再匹配.

通过这种方式,您应该能够至少只搜索您有兴趣添加此前缀的区域来运行您的文件,并且它不应该花费几乎与查找每个文件中的每个数字一样长的时间.