正则表达式用于在替换中引用超过9个值

时间:2010-07-21 22:07:32

标签: regex ultraedit

我有一个正则表达式,它遍历一个字符串并提取出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的值,然后追加{{ 1}}到最后。

非常感谢任何帮助,谢谢:)

此外我正在使用UEStudio,但如果一个不同的程序做得更好,那么没有大问题:)

5 个答案:

答案 0 :(得分:10)

正如psycho brm所指出: 使用10美元而不是10美元 我使用的是记事本++,它很漂亮。

答案 1 :(得分:3)

编辑器使用的大多数简单的正则表达式引擎都没有配备来处理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.

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

答案 2 :(得分:1)

如果你不能处理超过9个子组,为什么最初不匹配9组,然后循环并将正则表达式应用于那些匹配?

即。首先匹配(<test.*/test>)+,然后匹配<test(.*)/test>上的每个子组匹配。

答案 3 :(得分:1)

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

(.*)

使用:

(?<group10>.*)

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

${group10}

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

答案 4 :(得分:1)

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

相关问题