如何在记事本++替换中分隔正则表达式组号?

Posted

技术标签:

【中文标题】如何在记事本++替换中分隔正则表达式组号?【英文标题】:How to delimit a regex group number in notepad++ replacement? 【发布时间】:2017-01-09 23:37:21 【问题描述】:

我想指定一个捕获的组,然后在替换术语中指定一个文字数字,但文字数字被解释为组号的一部分。

鉴于这个(人为的)例子:

Input text: A5
Find: (.)(.)
Replace: $16
Expected result: A6
Actual result: <blank>

实验表明 $16 被解释为“第 16 组”。

我尝试使用$1\6 来制作6 文字,这给了我第1 组,但\6 是空白的 - 即结果只是A$1\\6 给了我A\6

一般问题是,“我如何指定第 1 组,然后指定文字数字”?

【问题讨论】:

你只需要$16 @WiktorStribiżew 我找不到任何记事本++ 帮助。您应该将其发布为答案。 【参考方案1】:

记事本 S&R 正则表达式由 Boost 正则表达式库提供支持。

明确的 $n 反向引用是通过 ID 周围的大括号 () 实现的,因此,您可以在此处使用 $16 作为替代。

Notepad++ 还支持以 \ 开头的 BRE 样式反向引用(\1\2 等*直到 9)。因此,当您在替换模式中使用\16 时,引擎只会将其解析为反向引用1 + 文字符号6。您可以通过将1234567890A 中的\11 替换为(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.) 来检查它。结果,您将获得11 而不是A(第11 组)。 $11 替换将导致 A

Notepad++ help 提到了这些符号,但缺少细节:

$n, $n, \n 返回与编号为 n 的子表达式匹配的内容。不允许负指数。

【讨论】:

是的,因为这些是 BRE 样式的反向引用,并且只支持 1 到 9 个这样的反向引用。 帮助页面的开头段落有一个链接(参见“在实施者的网站上”)到正则表达式语言的完整细节。我看不到替换语言的链接,但可以在 boost.org/doc/libs/1_48_0/libs/regex/doc/html/boost_regex/… 找到。可以在***.com/a/16104946/546871 找到这两个文档的链接

以上是关于如何在记事本++替换中分隔正则表达式组号?的主要内容,如果未能解决你的问题,请参考以下文章

在记事本++中用正则表达式查找和替换可变数字

正则表达式:擦洗 HTML

将字符串匹配到多个正则表达式模式并返回组号

用记事本++中的正则表达式替换引号中的所有逗号

使用记事本,我可以在使用回溯时在正则表达式查找和替换期间删除空格吗?

干货收藏 | R语言之正则表达式