好的,所以我试图在记事本++中超越第9个反向引用。维基说我可以使用组命名来超过第9个引用。但是,我似乎无法正确地进行匹配。我开始只用两组来简化它。
示例数据
1000,1000
正则表达式。
(?'a'[0-9]*),([0-9]*)
根据docs,我需要做以下事情。
(?<some name>...), (?'some name'...),(?(some name)...)
Names this group some name.
然而,结果是找不到我的文字。有什么建议吗?
答案 0 :(得分:32)
您可以简单地引用群组&gt;以与那些相同的方式使用图9中所示的方法。 10
,即10美元是第十组。
对于(天真的)例子:
字符串:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
正则表达式发现:
(?: A)(B)(C)(d)(E)(F)(G)(H)(I)(J)(K)(L)(M)(N)(O) (p)的
替换:
10 $
结果:
kqrstuvwxyz
我的测试是在Notepad ++ v6.1.2中进行的,并给出了我期望的结果。
更新:这仍然适用于v7.5.6
SarcasticSully复活了这个问题:
“如果你想用第一组替换后跟字符'0'怎么办?”
要执行此操作,请将替换更改为:
$ 1 \ X30
替换为第1组和十六进制字符30
- 在ascii中为0
。
答案 1 :(得分:3)
一个非常迟来的答案,可以帮助那些从Google登陆的人(就像我一样)。在notepad ++替换中命名的反向引用如下所示:$+{name}
。无论出于何种原因。
这里有一个偏离标准正则表达式的方法,但是......命名的反向引用也给出了数字。在标准正则表达式中,如果您有(.*)(?<name> & )(.*)
,则可以使用$1${name}$2
替换以获得与您开始时完全相同的行。在notepad ++中,您必须使用$1$+{name}$3
。
示例:我需要清理Visual Studio .sln文件以查找不匹配的配置。我需要替换的文字如下:
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Debug|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = Release|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = Release|Any CPU
我的搜索RegEx:
^(\s*\{[^}]*\}\.)(?<config>[a-zA-Z0-9]+\|[a-zA-Z0-9 ]+)*(\..+=\s*)(.*)$
我的替代RegEx:
$1$+{config}$3$+{config}
结果:
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.ActiveCfg = Dev|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|Any CPU.Build.0 = Dev|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.ActiveCfg = Dev|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x64.Build.0 = Dev|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.ActiveCfg = Dev|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.Dev|x86.Build.0 = Dev|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.ActiveCfg = QA|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|Any CPU.Build.0 = QA|Any CPU
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.ActiveCfg = QA|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x64.Build.0 = QA|x64
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.ActiveCfg = QA|x86
{CDDB12FE-885F-4FB7-9724-1A4279573DE5}.QA|x86.Build.0 = QA|x86
希望这有助于某人。
答案 2 :(得分:1)
好的,匹配没问题,你的例子在我当前的Notepad ++中匹配。这是一个重点。 要在Notepad ++中使用PCRE正则表达式,您需要版本&gt; = 6.0 。
另一点是,你想在哪里使用反向引用?我可以在正则表达式中使用名为backreferences而不会出现,但在替换字符串中则不会。
装置
(?'a'[0-9]*),([0-9]*),\g{a}
将匹配
1000,1001,1000
但我不知道使用命名组或组的方法&gt; 9替换字符串。
替换字符串中是否真的需要9个以上的反向引用?如果您只需要9个以上的小组,但不是所有小组都在替换中,那么通过添加?:
来创建您不需要重用非捕获组的组小组的开始。
(?:[0-9]*),([0-9]*),(?:[0-9]*),([0-9]*)
group 1 group 2
答案 3 :(得分:1)
使用\ x引用组的常用语法会将\ 10解释为对组1的引用,后跟0。
您需要在$ 10中使用$ x的替代语法。
注意:有些人似乎怀疑是否有任何理由要有10个小组。
我有一个简单的文件,我想将名为
,并以我的输入匹配项替换为:
重命名“ \ 1”“ \ 2 \ 5 \ 4 \ 3_ \ 6_ \ 9 \ 8 \ 7_ $ 10”,因为name_start和name_end并不总是恒定的。