gpt4 book ai didi

java - 替换正则表达式中的 Group2

转载 作者:行者123 更新时间:2023-11-30 05:57:41 28 4
gpt4 key购买 nike

我有以下文字

    ABCDEF
JHJHJNJN<098978686
<jjg>
HGHJFGV XXXX
10-10-2018
JHKGHKGHG
JKHJHHJM
10-10-2019 JGHHGHGVH
HBVJHBHBB

我想替换日期后跟 XXX+空格数这是我的代码

public class Regexreplace {

public static void main(String[] args){

String inp = " ABCDEF"
+" JHJHJNJN<098978686"
+" <jjg> "
+" HGHJFGV XXXX "
+" 10-10-2018 "
+" JHKGHKGHG "
+" JKHJHHJM"
+" 10-10-2019 JGHHGHGVH"
+" HBVJHBHB ";
String ipRegex = "(XXXX.*)[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})";

System.out.println(inp.replaceAll(ipRegex, "$110-11-2018"));

}

}

输出:

ABCDEF  JHJHJNJN<098978686      <jjg>           HGHJFGV XXXX            10-10-2018      JHKGHKGHG       JKHJHHJM    10-11-2018 JGHHGHGVH    HBVJHBHB

为什么要替换文本中的第二个日期?

最佳答案

它正在替换第二个日期,因为您的正则表达式中有一个贪婪的“匹配任何内容”序列:

"(XXXX.*)[\\s]+([\\d]{1,2}-[\\d]{1,2}-[\\d]{4})"
// ^^
// Here

this question 的答复解释贪婪和非贪婪(惰性)量词之间的区别。简而言之:

The standard quantifiers in regular expressions are greedy, meaning they match as much as they can, only giving back as necessary to match the remainder of the regex.

对于您的输入,这意味着 .* 序列将匹配包含第二个日期的行之前的所有内容。

由于您不需要“匹配任何内容”,一种解决方案是完全删除贪婪序列,并将空白匹配序列引入捕获组中:

"(XXXX\\s+)(\\d{1,2}-\\d{1,2}-\\d{4})"

注意:无需将 \\d\\s 放入字符类中 ([\\s])。

关于java - 替换正则表达式中的 Group2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885042/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com