【问题标题】:Can't reference capture group in Notepad++ regex search and replace无法在 Notepad++ 正则表达式搜索和替换中引用捕获组
【发布时间】:2014-07-05 05:23:19
【问题描述】:

使用记事本++ v6.5.5

我有以下正则表达式:

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

我正在尝试在以下行中捕获文本 Dow Corning / Molykote 111, Valve Lubricant

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还是不行。

如果有人让它工作,他们能告诉我他们使用的是什么版本吗?


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

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

【问题讨论】:

  • 替换后你想得到什么?
  • 您使用的是什么版本的notepad++?仅使用 Find 时你甚至得到匹配吗?
  • 我只想用引号括起来。但是当我使用正则表达式时,它并没有取代任何东西。我使用的是 6.5.5 版。是的,我只使用 find 时得到匹配。
  • 前瞻和后瞻是非捕获结构。它们内部的组确实捕获了一些东西,但它们不对应于输入中的任何文本,因为它们是零长度的。
  • 好吧,it's working fine on my 6.5.2。无法用您提供的线路重现您的问题。确保您的光标位于开头并且您正在寻找“向下”。

标签: regex notepad++


【解决方案1】:

使用合理的最新版本的记事本++,您可以做到这一点:

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

【讨论】:

  • 如果我删除第一个插入符号,正则表达式可以工作,但不幸的是,替换不起作用。我要尝试不同版本的notepad++。
  • @Zaemz: 好像是npp的一个bug,为了避免这个问题,你可以把光标放在文档的开头,点击replaceAll按钮。
【解决方案2】:

只需$1 即可。 $0 引用整个原始字符串。 (我的 N++ 版本是 6.6.9。)

【讨论】:

    猜你喜欢
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2019-01-27
    相关资源
    最近更新 更多