12

我有一个正则表达式,它遍历一个字符串并提取 40 个值,它看起来像下面的查询,但更大更复杂

est(.*)/test>test>(.*)<test><test>(.*)test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test><test>(.*)/test>

我的问题是,当数字超过 9 时,如何将这些表达式与 replace 命令一起使用。似乎每当我使用\10它时,它都会返回值\1,然后将 a 附加0到末尾。

任何帮助将不胜感激谢谢:)

我也在使用 UEStudio,但如果另一个程序做得更好,那就没什么大不了了 :)

4

5 回答 5

15

正如Psycho brm所指出的:使用 $10 而不是 \10 我正在使用记事本++,而且效果很好。

于 2013-06-28T11:30:02.003 回答
4

编辑器使用的大多数简单正则表达式引擎都无法处理超过 10 个匹配组;UltraEdit 似乎做不到。我刚刚尝试过 Notepad++,它甚至无法匹配10 个组的正则表达式。

我认为,你最好的选择是用一个体面的正则表达式解析器用一种快速的语言快速编写一些东西。但这并不能回答所问的问题

这是Python中的一些东西:

import re

pattern = re.compile('(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)')
with open('input.txt', 'r') as f:
    for line in f:
        m = pattern.match(line)
        print m.groups()

请注意,Python 允许反向引用,例如\20: 为了对组 2 进行反向引用,后跟文字 0,您需要使用\g<2>0,这是明确的。

编辑:大多数正则表达式和包含正则表达式引擎的编辑器应遵循如下替换语法:

abcdefghijklmnop
search: (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(?<name>.)(.)
note:    1  2  3  4  5  6  7  8  9  10 11 12 13
value:   a  b  c  d  e  f  g  h  i  j  k  l  m
replace result:
    \11      k1      i.e.: match 1, then the character "1"
    ${12}    l       most should support this
    ${name}  l       few support named references, but use them where you can.

命名引用通常只能在非常特定的正则表达式库中使用,请测试您的工具以确定。

于 2010-07-21T22:20:26.170 回答
3

在两位数子组前面放一个 $:例如 \1\2\3\4\5\6\7\8\9$10 它对我有用。

于 2016-12-13T21:07:03.130 回答
2

尝试使用命名组;所以不是第十个:

(.*)

采用:

(?<group10>.*)

然后使用以下替换字符串:

${group10}

(这当然是在没有使用循环的更好解决方案的情况下,请记住,根据您的环境,可能会有不同的正则表达式语法风格。)

于 2016-06-02T01:44:23.250 回答
1

如果您不能处理超过 9 个子组,为什么不首先匹配 9 个组,然后循环并将正则表达式应用于这些匹配项?

即第一次匹配(<test.*/test>)+,然后为每个子组匹配<test(.*)/test>

于 2010-07-21T23:54:52.470 回答