替换groovy中的捕获组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了替换groovy中的捕获组相关的知识,希望对你有一定的参考价值。

我是groovy的新手并且一直在尝试这个

我的目标字符串可以从哪里开始,然后可以跟随任意数量的。(点字符)和一个单词。我需要用_(下划线)替换所有。(点字符)

任何不以何处或不应该被替换的东西

示例字符串是

    hey where.is.the book on.brown.table 
    hey there.is.a.boy.in.the city Delhi
    hey here.is.the.boy living next door

预期的输出是

    hey where_is_the book on.brown.table 
    hey there_is_a_boy_in_the city Delhi
    hey here.is.the.boy living next door

我能够匹配确切的模式。使用/(where|there).((w+)(.))+/,但是当我使用replaceAll时,我的结果不正确。

答案

您可以使用

/(G(?!A)w+|(?:where|there))./

或者,如果您只需要处理这两个字:

/(G(?!A)w+|[wt]here)./

替换为$1_。见regex demo

细节

  • (G(?!A)w+|(?:where|there)) - 第1组捕获: G(?!A)w+| - 上一场比赛的结束(G(?!A)),然后是1+字的字符(w+),或者 (?:where|there) - wherethere整个单词(如果你只需要处理这两个单词,你甚至可以把它写成[tw]here
  • . - 一个点。

Groovy demo

String s = "hey where.is.the book on.brown.table
hey there.is.a.boy.in.the city Delhi
hey here.is.the.boy living next door"
print s.replaceAll(/(G(?!A)w+|(?:where|there))./, '$1_')

输出:

hey where_is_the book on.brown.table
hey there_is_a_boy_in_the city Delhi
hey here.is.the.boy living next door

以上是关于替换groovy中的捕获组的主要内容,如果未能解决你的问题,请参考以下文章

SQL查找和替换正则表达式捕获组限制?

如何在 Xcode 11 的查找和替换中引用捕获组?

用活动组内的另一个片段替换片段

为什么groovy方法不打印该文件不存在?

在 re.sub 替换模式中处理对捕获组的反向引用

Java Regex替换为捕获组