我有以下代码使用Regex在双引号中提取字符串。
String str ="\"Java\",\"programming\"";
final Pattern pattern = Pattern.compile("\"([^\"]*)\"");
final Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group(1));
}
我现在得到的输出是 java编程。但是从字符串 str 我希望第二个双引号中的内容是编程 。任何人都可以告诉我如何使用Regex做到这一点。
答案 0 :(得分:4)
如果您举例,请稍微更改为:
String str ="\"Java\",\"programming\"";
final Pattern pattern = Pattern.compile("\"([^\"]*)\"");
final Matcher matcher = pattern.matcher(str);
int i = 0
while(matcher.find()){
System.out.println("match " + ++i + ": " + matcher.group(1) + "\n");
}
你会发现它打印出来:
match 1: Java
match 2: programming
这表明您可以遍历所有匹配项。如果您只想要最后一场比赛,那么您有很多选择:
Pattern.compile(".*\"([^\"]*)\"")
如果你真的想明确第二场比赛,那么最简单的解决方案就像Pattern.compile("\"([^\"]*)\"[^\"]*\"([^\"]*)\"")
。这给出了两个匹配的组。
答案 1 :(得分:2)
如果您希望最后一个标记位于双引号内,请添加行尾归档($
):
final Pattern pattern = Pattern.compile("\"([^\"]*)\"$");
在这种情况下,如果您的输入是单行,则可以将while
替换为if
。
答案 2 :(得分:1)
保罗给出了很好的答案。好吧,你也可以尝试这种模式
final Pattern pattern = Pattern.compile(",\"(\\w+)\"");
Java程序
String str ="\"Java\",\"programming\"";
final Pattern pattern = Pattern.compile(",\"(\\w+)\"");
final Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group(1));
}
<强>解释强>
,\"
:匹配逗号,后跟引号"
(\\w+)
:匹配一个或多个字词
\"
:匹配最后一个引号"
然后捕获组(\\w+)
(精确组1)
<强>输出强>
programming