使用Regex提取字符串

时间:2015-09-28 19:27:29

标签: java regex

我有以下代码使用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做到这一点。

3 个答案:

答案 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