无法在Notepad++正则表达式查找和替换中引用捕获组

3
使用Notepad++ v6.5.5
我有以下正则表达式:
((?<=,)[,\ \/\-#\w]{2,}(?=,[0-9]))

我想要捕获下面这一行中的文本 Dow Corning / Molykote 111, 阀门润滑剂
111,Dow Corning / Molykote 111,  Valve Lubricant,25.000000,Y,46.010000,1,1 MSRP

它可以很好地捕获,但我似乎无法引用替换组。

我尝试了以下方法:

"$0"
"$1"
"$2"
"$3"
"\0"
"\1"
"\2"
"\3"
\1 = "\1"

我还将括号移动到了前瞻和后顾之内:

(?<=,)([,\ \/\-#\w]{2,})(?=,[0-9])

我试图用下面的乱码替换文本:

ansfnasflknsf

没有任何内容被替换。不确定到底发生了什么。我可以使用普通文本进行查找/替换,但无法使用正则表达式。


呃,刚试了v6.4.5,仍然不起作用。

如果有人能让这个工具正常工作,请告诉我他们正在使用的版本是哪一个?


以下正则表达式更适合捕获我的需求:

((?<=,)(?<!\ )[,\ \/\-#\w]{2,}(?=,[0-9\.]+))


替换后,您想获得什么? - Casimir et Hippolyte
你使用的是哪个版本的Notepad++?当你只使用查找功能时,是否能够匹配到结果? - Jerry
向前查看和向后查看是非捕获构造。它们内部的分组确实会捕获内容,但它们不对应输入中的任何文本,因为它们长度为零。 - Sergey Kalinichenko
我需要捕获的组是整个字段,但其中可能包含逗号。 - Nathan Lutterman
1
嗯,在我的6.5.2上运行良好。使用您提供的代码行无法重现您的问题。请确保您的光标位于开头并且您正在查找“向下”。 - Jerry
显示剩余4条评论
2个回答

3
只需要$1就可以了。$0代表整个原始字符串。(我的N ++版本是6.6.9。)

1

如果您使用的是合理的最新版本的Notepad ++,则可以这样做:

find:    ^[^,]*,\K.+?(?=,[0-9.]+,)
replace: "$0"

如果我刪除第一個插入符號,正則表達式就可以工作,但不幸的是替換沒有起作用。我將嘗試使用Notepad++的不同版本。 - Nathan Lutterman
1
@Zaemz:npp似乎存在一个bug,为了避免这个问题,您可以将光标放在文档开头并单击“replaceAll”按钮。 - Casimir et Hippolyte

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