Java 使用正则表达式去除所有不情愿的花括号
注意:这是一个仅限Java的问题(即没有Javascript、sed、Perl等) 我需要过滤掉一长串文本中所有“不情愿”的大括号(Java 使用正则表达式去除所有不情愿的花括号,java,regex,Java,Regex,注意:这是一个仅限Java的问题(即没有Javascript、sed、Perl等) 我需要过滤掉一长串文本中所有“不情愿”的大括号({}) (我所说的“不情愿”是指 我已经找到了以下正则表达式,它正确地查找并列出了所有此类事件: Pattern pattern = Pattern.compile("(\\{)(.*?)(\\})", Pattern.DOTALL); Matcher matcher = pattern.matcher(originalString);
{}
)
(我所说的“不情愿”是指
我已经找到了以下正则表达式,它正确地查找并列出了所有此类事件:
Pattern pattern = Pattern.compile("(\\{)(.*?)(\\})", Pattern.DOTALL);
Matcher matcher = pattern.matcher(originalString);
while (matcher.find()) {
Log.d("WITHIN_BRACES", matcher.group(2));
}
我现在的问题是如何将找到的每个matcher.group(0)
替换为相应的matcher.group(2)
直觉上我试过:
while (matcher.find()) {
String noBraces = matcher.replaceAll(matcher.group(2));
}
但这将所有找到的matcher.group(0)
替换为第一个matcher.group(2)
,这当然不是我想要的
Java的正则表达式中是否有一个表达式或方法来执行我需要的“对应的replaceAll”
回答:多亏了下面的提示,我想出了两个解决方法:
if (matcher.find()) {
String noBraces = matcher.replaceAll("$2");
}
“$2”
而不是匹配器。组(2)
if
而不是while
现在就像一个符咒一样工作。您可以使用特殊的反向引用语法:
String noBraces=matcher.replaceAll($2”)代码>请提供一些示例输入和预期输出。哦,现在我明白了。您连续两次使用while(matcher.find())
!这就是为什么第二个循环什么都不做——匹配器已经完成匹配。您必须在一个while
循环中完成所有工作。@Kilian Foth实际上,我没有在一行中使用while(matcher.find())
两次。但是我正在使用while()
——遍历所有找到的matcher.group(2)
s。你是说我根本不应该while()
?我现在要试试…@Kilian Foth用if()替换while()
,成功了。这太令人困惑了。。。澄清一下:“$2”
起作用,而matcher.group(2)
不起作用。