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

我有一个包含长度为 5 的文本和数字的文件(即1200011153 等)。我想用0 附加所有这些数字。所以11153 变成了111530。这在 Notepad++ 中可行吗?

我知道我可以使用以下正则表达式找到所有数字:[0-9]{5},但是如何用相同的数字以及附加的 0 替换这些数字?

在替换框中我尝试了以下操作:

  • [0-9]{5}0 - 字面意思,所以 11153 被替换为 [0-9]{5}0
  • \10 - 我在某处读到 \1 会参加比赛,但它似乎不起作用。这会将11153 替换为0
  • 编辑:\00 - 基于此SO answer 我知道我需要使用\0 而不是\1。但它仍然不起作用。这会将11153 替换为

所以,我感觉我与 \1\0 很接近,但还不够接近。

【问题讨论】:

  • ^[0-9]{5}$(或\b[0-9]{5}\b) --> ${0}0

标签: regex replace notepad++


【解决方案1】:

你很亲密。您需要通过用括号括起来将捕获组添加到您的正则表达式。 ([0-9]{5})

然后使用\10 作为替换。这是用第 1 组中的文本替换匹配项,后跟零。

【讨论】:

  • 没问题。我只是不够快:)。很高兴你有解决方案
【解决方案2】:

您非常接近答案!你错过的是一个捕获组。

在“查找内容”部分使用此正则表达式:

([0-9]{5})

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

\10

() 代表一个捕获组。这实质上意味着您捕获您的号码,然后将其替换为相同的号码,后跟一个零。

【讨论】:

  • 您根本不需要捕获,所有 OP 需要的是 \d{5}(或 \b\d{5}\b,或 ^\d{5}$) --> ${0}0,只需使用定义为的第 0 个组类似 Perl 的反向引用。使用 POSIX 样式反向引用需要使用捕获组,true(因为 POSIX 反向引用从 1 开始到 9,因此 \10 永远不会被误认为是对第 10 组的反向引用)。
  • 就我而言,我不需要\10 中的最后一个0。我只是用括号捕获组并使用\1 替换捕获组文本以使替换结果与搜索捕获组相同。
  • 在 VSCode 上,$10 对我有用。相关:stackoverflow.com/q/43577528/1169233
【解决方案3】:

您可以使用\K to reset

\b\d{5}\b\K

并替换为0

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++ 中,“查找下一个”也有效(应该是零长度匹配)。
猜你喜欢
  • 1970-01-01
  • 2014-08-31
  • 2015-09-28
  • 2015-11-30
  • 2016-05-23
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多