gpt4 book ai didi

java - 在java中使用正则表达式替换括号中的逗号

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:32 27 4
gpt4 key购买 nike

我只想在括号内替换逗号。

例如

 Progamming languages (Java, C#, Perl)

Progamming languages (Java or C# or Perl)

但它不应该替换后面字符串中的逗号

Progamming languages Java, C#, Perl

代码

它将正确替换但不匹配。

 String test  = "Progamming languages (Java, C#, Perl)";
String test1 = "Progamming languages Java, C#, Perl"


String foo = replaceComma(test);
String foo1 = replaceComma(test1);


private static String replaceComma(String test)
{
String patternStr= "\\((?:.*)(,)(?:.*)\\)";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher= pattern.matcher(test);

if(matcher.matches())
{
return test.replaceAll("(,)", " or ");
}

return test;

}

更新

String.replaceAll("(,)", "or "); 当你有这样的字符串时将不起作用

String test = "Learning, languages (Java, C#, Perl)";

所以你必须使用@polygenelubricants 代码

最佳答案

您可以使用正 lookahead (?=…) 像这样:

    String COMMA_INSIDE = ",(?=[^()]*\\))";
String text = "a, b, c, (d, e, f), g, h, (i, j, k)";
System.out.println(
text.replaceAll(COMMA_INSIDE, " OR")
);
// a, b, c, (d OR e OR f), g, h, (i OR j OR k)

这匹配一个逗号,但前提是它右边的第一个括号是结束类型。

[^…] 是一个 negated character class . [^()] 匹配除括号之外的任何内容。 * 是零个或多个 repetition . \)(写成 "\\)" 作为 Java 字符串文字)从字面上匹配右括号。反斜杠转义了 grouping 的特殊元字符。 .

这假设输入字符串是格式正确的,即括号总是平衡的而不是嵌套的。

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

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