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

标签 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 时,如何将这些表达式与替换命令一起使用。似乎每当我使用 \10 时它返回 \1 的值然后附加一个 0到最后。

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

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

最佳答案

编辑器使用的大多数简单的 Regex 引擎都不能处理 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.

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

关于正则表达式在替换中支持引用超过 9 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3304283/

相关文章:

javascript - 在UltraEdit中搜索关键字

regex - UE中如何编写正则表达式来实现这个需求呢?

c# - 为什么\b 不匹配使用 .net 正则表达式的单词

ruby-on-rails - 在 Rails 模型中进行正则表达式搜索的惯用方法?

regex - golang regexp ReplaceAllStrings with backreference不太管用

RegEx - 如何选择第二个逗号及其后的所有内容

javascript - 如何从 : SQL Query to Couchbase NoSQL? 转换 RegEx sql 查询

javascript - 使用给定的搜索词改进 RegEx 以突出显示页面上的文本

html - UltraEdit 中的 XML 缩进

regex - UltraEdit:使用\n和or\r删除特定长度以下的所有行