Regex 替换前20个事件

Regex 替换前20个事件,regex,notepad++,Regex,Notepad++,我需要捕获(替换)下一行中出现的前20个数字(逗号之前) 11112222333344445555, 123456 并在数字之间插入逗号。我尝试添加(\d)(\d)。。。(\d)20次并替换为\1、\2、\20但它失败了。我可以知道使用记事本++的更好方法吗。查找: (?<a>\d)(?<b>\d)(?<c>\d)(?<d>\d)(?<e>\d)(?<f>\d)(?<g>\d)(?<h>\d)(?&

我需要捕获(替换)下一行中出现的前20个数字(逗号之前)

11112222333344445555, 123456
并在数字之间插入逗号。我尝试添加
(\d)(\d)。。。(\d)
20次并替换为
\1、\2、\20
但它失败了。我可以知道使用记事本++的更好方法吗。

查找:

(?<a>\d)(?<b>\d)(?<c>\d)(?<d>\d)(?<e>\d)(?<f>\d)(?<g>\d)(?<h>\d)(?<i>\d)(?<j>\d)(?<k>\d)(?<l>\d)(?<m>\d)(?<n>\d)(?<o>\d)(?<p>\d)(?<q>\d)(?<r>\d)(?<s>\d)(?<t>\d)
${a},${b},${c},${d},${e},${f},${g},${h},${i},${j},${k},${l},${m},${n},${o},${p},${q},${r},${s},${t}


现在说了这么多。。。对于较大的
n
的类似问题,最好使用迭代/编程方法(使用您选择的语言),而不是单次“查找/替换”regex操作

Java中的示例:

String input = /* some string */;

Pattern pattern = Pattern.compile("^\\d+");
Matcher matcher = pattern.matcher(input);
String match = matcher.group();

StringBuilder sb = new StringBuilder(match.length()*2);
for (char ch : match.toCharArray()) {
    sb.append(ch);
    sb.append(',');
}
String replacement = sb.substring(0,sb.length()-1);

String result = replacement + input.subString(match.length());

对于数字大于9的捕获组,应使用
${10}
${11}

-查找内容:
(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)(\d)
-替换为:
$1、$2、$3、$4、$5、$6、$7、$8、$9、${10}、${11}、${12}、${13}、${14}、${15}、${16}、${17}、${18}、${19}、${20}

但如果数量较大,则无法维护,我建议您使用:

  • 查找内容:
  • 替换为:
    $0,

我找到了一种不需要命名组的解决方案:

  • 搜索
    (\d)(\d)…(\d)
  • 替换为
    $1、$2、$9、$10、$20
如果有助于消除表达式的歧义,可以将反引用号括在花括号中:
$11
${11}
都表示第11个表达式,而
${1}1
表示第一个反引用,后面紧跟字符
1


语法如中所述,但请注意不要尝试在替换字段中使用搜索语法(
\g{n}
)!

您所说的“它失败”是什么意思?考虑到你所发布的内容,这应该是有效的。这让我觉得有些东西被误传了,或者你没有发布。@Travis似乎记事本++不支持替换
\10
及其以外的内容。它与
\1
+
0
。很有趣。(我自己没有记事本+)。为什么不运行两个正则表达式呢?(第二个正则表达式可能必须不同,以说明第一个正则表达式之后的修改)+1,notepad++基于boost,如果我引用它指定它只处理最多
\9
的反向引用,除非notepad++也限制命名反向引用的数量,否则您可以在前九个之后使用命名反向引用,以达到总共20个。看起来,您不需要环绕
{}
@SantoshLinkha是的,我在中编辑了这篇文章。记事本+++关于这个主题的文档确实很平淡:-/