好的,我尝试在notepad++中分组超过第9个反向引用。wiki说我可以使用分组命名来超过第9个引用。然而,我似乎不能正确地获得语法来进行匹配。我开始只使用两个分组来简化它。
示例数据
1000,1000
正则表达式
(?'a'[0-9]*),([0-9]*)
根据文件,我需要做以下工作。
(?<some name>...), (?'some name'...),(?(some name)...)
Names this group some name.
但是,结果是它找不到我的文本。有什么建议吗?
4条答案
按热度按时间tez616oj1#
您可以使用与引用〈10的组相同的方式引用〉9的组
即$10是第十组。
举个(幼稚的)例子:
字符串:
阿布茨夫吉伊克尔姆诺普克尔斯图夫克斯
正则表达式查找:
(?:a)(B)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)
替换:
十元
结果:
克尔克斯图夫克斯
我的测试是在Notepad++ v6.1.2中执行的,并给出了我预期的结果。
更新:从v7.5.6起仍然有效
讽刺萨利重提这个问题:
“如果要替换为第一组,后跟字符”0“,该怎么办?”
为此,请将替换更改为:
1元
替换为组1和十六进制字符
30
(ASCII中的0
)。dgsult0t2#
这是一个非常迟的回答,可以帮助其他从Google登陆到这里的人(就像我一样)。记事本替换中的命名反向引用看起来像这样:
$+{name}
不管什么原因。这里有一个与标准正则表达式不同的地方......命名的反向引用也被赋予了数字。在标准正则表达式中,如果你有
(.*)(?<name> & )(.*)
,你会用$1${name}$2
来替换,以获得与你开始时完全相同的行。在记事本中,你必须使用$1$+{name}$3
。**示例:**我需要清理Visual Studio .sln文件中不匹配的配置。我需要替换的文本如下所示:
我的搜索RegEx:
我的替代RegEx:
结果是:
希望这能帮到什么人。
2ul0zpep3#
好的,匹配没有问题,你的例子在当前的记事本中为我匹配。这是很重要的一点。**要在记事本中使用PCRE正则表达式,你需要一个版本〉= 6.0**。
另一点是,你想在哪里使用反向引用?我可以在正则表达式**中使用命名反向引用,而不是在替换字符串中。
手段
将匹配
但是我不知道如何在替换字符串中使用命名组或〉9的组。
替换字符串中是否确实需要9个以上的反向引用?如果只需要9个以上的组,而不是替换中的所有组,则通过在组的开头添加
?:
,使组不需要重用非捕获组。vcirk6k64#
使用\x引用组的常见语法将\10解释为对组1的引用,后跟0。
您需要使用$x和$10的替代语法。
这里的问题是针对Notepad++的,但是如果您必须在Bash中执行此操作,请不要忘记将表达式转义为$10
<name_start>* 年月日_时间_年月日_时间 <name_end>替换为<name_start> 年年月日_时间_年年月日_时间 <name_end>,
最后将我输入的匹配替换为:
将“\1”重命名为“\2\5\4\3_\6_\9\8\7_$10”,因为名称开始和名称结束并不总是恒定的。