gpt4 book ai didi

Java正则表达式比较组和字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:22 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式进行替换。相关代码如下:

String msg ="    <ClientVerificationResult>\n " +
" <VerificationIDCheck>Y</VerificationIDCheck>\n" +
" </ClientVerificationResult>\n";

String regex = "(<VerificationIDCheck>)([Y|N])(</VerificationIDCheck>)";
String replacedMsg= msg.replaceAll(regex, "$2".matches("Y") ? "$1YES$3" : "$1NO$3") ;
System.out.println(replacedMsg);

这个的输出是

<ClientVerificationResult>
<VerificationIDCheck>NO</VerificationIDCheck>
</ClientVerificationResult>

应该是什么时候

<ClientVerificationResult>
<VerificationIDCheck>YES</VerificationIDCheck>
</ClientVerificationResult>

我想问题是 "$2".matches("Y") 返回 false。我试过在 matches() 中做 "$2".equals("Y"); 和奇怪的组合,比如 "[Y]" 或者“([Y])”,但仍然没有。

如果我打印 "$2",输出是 Y。关于我做错了什么的任何提示?

最佳答案

您不能使用 Java 代码作为 replaceAll 的替换参数,它应该只是一个字符串。更好地使用 PatternMatcher API 并为您的替换逻辑评估 matcher.group(2)

建议代码:

String msg ="    <ClientVerificationResult>\n " +
" <VerificationIDCheck>Y</VerificationIDCheck>\n" +
" </ClientVerificationResult>\n";

String regex = "(<VerificationIDCheck>)([YN])(</VerificationIDCheck>)";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher( msg );
StringBuffer sb = new StringBuffer();
while (m.find()) {
String repl = m.group(2).matches("Y") ? "YES" : "NO";
m.appendReplacement(sb, m.group(1) + repl + m.group(3));
}
m.appendTail(sb);
System.out.println(sb); // replaced string

关于Java正则表达式比较组和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30512274/

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