Notepad ++替换相同文本的正则表达式匹配加上附加字符
Posted
技术标签:
【中文标题】Notepad ++替换相同文本的正则表达式匹配加上附加字符【英文标题】:Notepad++ Replace regex match for same text plus appending character 【发布时间】:2016-06-29 05:49:51 【问题描述】:我有一个包含长度为 5 的文本和数字的文件(即12000
、11153
等)。我想用0
附加所有这些数字。所以11153
变成了111530
。这在 Notepad++ 中可行吗?
我知道我可以使用以下正则表达式找到所有数字:[0-9]5
,但是如何用相同的数字以及附加的 0
替换这些数字?
在替换框中我尝试了以下操作:
[0-9]50
- 字面意思,所以 11153
被替换为 [0-9]50
\10
- 我在某处读到 \1
会参加比赛,但它似乎不起作用。这会将11153
替换为0
编辑:\00
- 基于此SO answer 我知道我需要使用\0
而不是\1
。但它仍然不起作用。这会将11153
替换为
所以,我感觉我与 \1
或 \0
很接近,但还不够接近。
【问题讨论】:
^[0-9]5$
(或\b[0-9]5\b
) --> $00
【参考方案1】:
你很亲密。您需要通过用括号括起来将捕获组添加到您的正则表达式。 ([0-9]5)
然后使用\10
作为替换。这是用第 1 组中的文本替换匹配项,后跟零。
【讨论】:
没问题。我只是不够快:)。很高兴你有解决方案【参考方案2】:您非常接近答案!你错过的是一个捕获组。
在“查找内容”部分使用此正则表达式:
([0-9]5)
在“替换为”中,使用这个:
\10
(
和 )
代表一个捕获组。这实质上意味着您捕获您的号码,然后将其替换为相同的号码,后跟一个零。
【讨论】:
您根本不需要捕获,所有 OP 需要的是\d5
(或 \b\d5\b
,或 ^\d5$
) --> $00
,只需使用定义为的第 0 个组类似 Perl 的反向引用。使用 POSIX 样式反向引用需要使用捕获组,true(因为 POSIX 反向引用从 1
开始到 9
,因此 \10
永远不会被误认为是对第 10 组的反向引用)。
就我而言,我不需要\10
中的最后一个0
。我只是用括号捕获组并使用\1
替换捕获组文本以使替换结果与搜索捕获组相同。
在 VSCode 上,$10
对我有用。相关:***.com/q/43577528/1169233【参考方案3】:
您可以使用\K
to reset。
\b\d5\b\K
并替换为0
\b
匹配 word boundary
\d
是数字 [0-9]
的 short
See demo at regex101
【讨论】:
也许这是 Notepad++ 中的一个错误,但是当我使用您的正则表达式并使用 Find Next 时,它确实找到了所有数字,但是当我单击替换为0
时,它不会附加 0 ..
@KevinCruijssen:刚刚检查过,添加了零(v.6.9)。
@KevinCruijssen 我用我的 np++ v6.8.8 对其进行了测试:)
当我使用 Replace All 时,它确实有效,但当我使用 Find Next + Replace 时,它不起作用(Notepad++ v6.9)。啊,好吧,无论如何我都需要更换所有东西,所以+1也是如此。不过,我接受了 HappyCoder 的回答。与正则表达式一样,有很多不同的方法可以解决相同的问题。
@KevinCruijssen 没关系,由你决定哪个答案更喜欢:) 在我的 np++ 中,“查找下一个”也有效(应该是零长度匹配)。以上是关于Notepad ++替换相同文本的正则表达式匹配加上附加字符的主要内容,如果未能解决你的问题,请参考以下文章