使用正则表达式成对替换



我想替换字符串中的一对引号。换句话说,必须有一个问号事件计数。

第一个替换为,第二个替换为

简单输入:Some "text"输出:Some „text”

我写了一个简单的代码来处理(下面),但我想知道是否有一个更简单的方法,例如使用regex。我的简单正则表达式。*(").+(?=("))找到一对引号,但它不检查问号的总数是否为偶数。是否有一种方法来实现我想要使用正则表达式?

My Java code:

private static String replace(String s) {
if (s.isEmpty()) {
return s;
}

long count = s.chars()
.filter(c -> c == '"')
.count();
if (count % 2 != 0) {
return s;
}
final StringBuilder sb = new StringBuilder(s.length());
boolean replaceFirst = true;
for (int i = 0; i < s.length(); i++) {
final char c = s.charAt(i);
if (c != '"') {
sb.append(c);
} else {
sb.append(
replaceFirst ? "„" : "”"
);
if (replaceFirst) {
replaceFirst = false;
}
}
}
return sb.toString();
}

要将直双引号转换为大双引号,可以使用正则表达式匹配一对直引号,同时捕获中间除直双引号以外的任何字符,并将其替换为对大双引号内捕获值的反向引用:

.replaceAll(""([^"]*)"", "„$1”")

参见regex演示。<<em>细节/em>

  • "- a"char
  • ([^"]*)-捕获组1(替换模式中的$1指该组值):"以外的任何零个或多个(*)字符([^"]是一个否定的字符类)
  • "- a"char.

查看Java演示:

String s = "Some "text"";
System.out.println(s.replaceAll(""([^"]*)"", "„$1”")); 
// => Some „text”

最新更新