Regex 替换记事本中的文本++;用正则表达式

Regex 替换记事本中的文本++;用正则表达式,regex,replace,notepad++,Regex,Replace,Notepad++,我正试图在谷歌翻译中翻译一个字幕,但一切都顺利,只有一个问题,它删除了《泰晤士报》上的逗号,。很好。我把它粘贴在记事本++上,并试图用正则表达式替换它。时间格式为: 00:00:44927--> 应该是 00:00:44927--> 所以我在Find what字段上尝试了这个正则表达式::(\d){2}(\d){3}(->) 在replace with字段中显示::$1,$2--> 搜索工作正常,但替换结果如下:00:00:47。似乎$1代表第一个匹配的(\d){2}的第一个数字,即4,第二个匹

我正试图在谷歌翻译中翻译一个字幕,但一切都顺利,只有一个问题,它删除了《泰晤士报》上的逗号
。很好。我把它粘贴在记事本++上,并试图用正则表达式替换它。时间格式为:

00:00:44927-->

应该是

00:00:44927-->

所以我在Find what字段上尝试了这个正则表达式:
:(\d){2}(\d){3}(->)

在replace with字段中显示:
:$1,$2-->

搜索工作正常,但替换结果如下:
00:00:47
。似乎
$1
代表第一个匹配的
(\d){2}
的第一个数字,即
4
,第二个匹配的
(\d){3}
7


为什么?

您需要将范围量词
{n}
放在捕获组中。通过将它们放置在捕获组之外,您告诉正则表达式引擎该组将被重复n次,而不是令牌
\d

Find: :(\d{2})(\d{3})( -->)
Replace: :$1,$2$3
如果愿意,还可以使用lookaround断言来实现这一点

Find: :\d\d\K(?=\d\d\d)
Replace: ,
你可以这么做

(?<=\d\d)(\d{3})(?= -->)
(?)
并替换为
,$1


您没有捕获
\d{3}
,只是捕获了
\d
,这就是为什么您的正则表达式没有按预期工作。

谢谢。你的解决方案很好。