someText
1
2
3
4
moreText
我想在每个数字前添加一个前缀。
但是使用
(\w+\R)(\d+\R)+(\w+)
和\1prefix\2\3
只会在最后一个数字前添加前缀并删除其他数字。是否有一种方法可以使用单个正则表达式完成此操作,还是我需要编写一个脚本来完成?
(\d+\R)+
中使用了贪婪匹配,特别是最后的+
。它的意思是,“尽可能多次地匹配这个组,只要不导致匹配失败”。因此,在您的文本中,它会一口气吞下1、2、3和4,直到无法再吞下为止,并将最后一次匹配放入第二个捕获组中。显然,正则表达式引擎无法表达可变参数组,那么您该如何解决呢?所以简短的答案是,我认为正则表达式并不适合完全自动化的处理,您需要编写一个脚本。find: (\w+\R)((?:\d+\R)+)(\w+)
replace: \1prefix\2\3
(\w+\R)
,如果您再次运行查找/替换,它会命中行中的下一个数字,直到不再匹配为止。