Notepad++ 正则表达式替换匹配相同文本并添加字符

76

我有一个包含文本和数字的文件,数字长度为五位(如 12000, 11153 等等)。我想在所有这些数字后添加 0。因此,11153 变成了 111530。在 Notepad++ 中是否可以实现?

我知道可以使用以下正则表达式找到所有数字:[0-9]{5},但是如何用相同的数字替换它们,并在末尾添加 0 呢?

在替换框中,我尝试了以下方法:

  • [0-9]{5}0 - 它会把它字面解释,所以 11153 被替换成了 [0-9]{5}0
  • \10 - 我在某处读到过 \1 会获取匹配,但似乎不起作用。这将把 11153 替换为 0
  • 编辑:\00 - 基于这个SO答案,我发现需要使用 \0 而不是 \1。然而,它仍然不起作用。这将把 11153 替换为

所以,我感觉我已经接近了解决方案,但还是差一点。


^[0-9]{5}$(或\b[0-9]{5}\b)--> ${0}0 - Wiktor Stribiżew
4个回答

100

你离答案非常接近!你漏掉的是一个捕获组。

在“查找”部分使用这个正则表达式:

([0-9]{5})

在“替换为”部分,使用这个:

\10

()代表捕获组。这基本上意味着您捕获了数字,然后将其替换为相同的数字后跟一个零。


3
不需要捕获所有内容,OP只需要\d{5}(或\b\d{5}\b^\d{5}$)-->${0}0,只需使用与Perl类似的0组。使用POSIX样式反向引用需要使用捕获组,正确(因为POSIX反向引用从1到9开始,因此\10永远不会被错误地解释为对第10组的反向引用)。 - Wiktor Stribiżew
在我的情况下,我不需要\10中的最后一个0。 我只需使用括号进行捕获组,并使用\1替换捕获组文本,使替换结果与搜索捕获组相同。 - Natta Wang
在VSCode上,"$10" 对我有用。相关链接:https://dev59.com/CFcP5IYBdhLWcg3w8uhi - Waldir Leoncio

9
你离成功不远了。你需要在正则表达式中加入括号来捕获匹配到的内容。([0-9]{5}) 然后使用\10作为替换文本。这样会用第一个捕获组的文本加上一个零来代替匹配到的文本。

2
没问题。我只是不够快 :). 很高兴你有解决方案。 - roblovelock

4

也许这是Notepad++的一个bug,当我使用您的正则表达式并使用“查找下一个”时,它确实找到了所有数字,但当我点击替换为“0”时,它没有附加0。 - Kevin Cruijssen
1
@KevinCruijssen:刚刚检查了一下,零已经被添加了(v.6.9)。 - Wiktor Stribiżew
1
@KevinCruijssen 我使用我的np ++ v6.8.8进行了测试,它可以正常工作:) - bobble bubble
1
当我使用“全部替换”时,它确实有效,但是当我使用“查找下一个+替换”时,它不起作用(Notepad++ v6.9)。啊好吧,反正我需要替换所有内容,所以加1。尽管如此,我还是接受了_HappyCoder_的答案。像往常一样,在正则表达式方面,有很多不同的解决相同问题的方法。 - Kevin Cruijssen
1
@KevinCruijssen 没问题,你可以选择哪个答案: ) 在我的np++中,“查找下一个”也有效(零长度匹配正常)。 - bobble bubble

0
一般情况下:
Find what:    (?<=left)(.*?)(?=right)
Replace with: left_append\1right_append
Wrap around [x]

所以例如。
fast=false, out_loc='file',
category=9%s!d,
-->
fast={false}, out_loc={'file'},
category={9%s!d},

即在等号和逗号之间添加大括号{ },可以实现。
(?<==)(.*?)(?=,)
\{\1\}

根据需要适当进行转义。正则表达式进一步阅读

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接