Notepad ++替换相同文本的正则表达式匹配加上附加字符

Posted

技术标签:

【中文标题】Notepad ++替换相同文本的正则表达式匹配加上附加字符【英文标题】:Notepad++ Replace regex match for same text plus appending character 【发布时间】:2016-06-29 05:49:51 【问题描述】:

我有一个包含长度为 5 的文本和数字的文件(即1200011153 等)。我想用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 ++替换相同文本的正则表达式匹配加上附加字符的主要内容,如果未能解决你的问题,请参考以下文章

notepad++正则表达式替换,在匹配文本前插入字符,如何做到?

notepad++使用正则处理多行数据

notepad正则怎么替换其中一部分

常用模块

tcl 正则匹配与替换

awk one-liner 仅替换第一个匹配的正则表达式出现的文本