我只想在内部括号中替换逗号.
例如
Progamming languages (Java, C#, Perl)
Run Code Online (Sandbox Code Playgroud)
至
Progamming languages (Java or C# or Perl)
Run Code Online (Sandbox Code Playgroud)
但它不应该在下面的字符串中重复逗号
Progamming languages Java, C#, Perl
Run Code Online (Sandbox Code Playgroud)
码
它会正确替换,但不匹配.
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;
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
String.replaceAll("(,)", " or ");
当你有像这样的字符串时将无法工作
String test ="学习,语言(Java,C#,Perl)";
所以你必须使用@polygenelubricants代码
你可以像这样使用正向前瞻 (?=…)
:
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)
Run Code Online (Sandbox Code Playgroud)
这与逗号匹配,但前提是右边的第一个括号是结束类型.
这[^…]
是一个否定的角色类.[^()]
匹配除括号外的任何内容.这*
是零次或多次重复.在\)
(写为"\\)"
一个Java字符串字面量),一个右括号匹配,从字面上.反斜杠逃脱了分组的特殊元字符.
这假设输入字符串格式正确,即括号始终是平衡的而不是嵌套的.
归档时间: |
|
查看次数: |
5035 次 |
最近记录: |