Java Regex匹配单词+空格

时间:2013-07-11 06:20:17

标签: java regex

我正在尝试构建这个简单的正则表达式以匹配Java中的单词+空格,但我很困惑,试图解决它。这个网站上有很多类似的例子,但答案主要是给出正则表达式本身而不解释它是如何构造的。

我正在寻找的是形成正则表达式背后的思路。

示例输入字符串:

String Tweet = "\"Whole Lotta Love\" - Led Zeppelin";

打印时:"Whole Lotta Love" - Led Zeppelin

问题陈述:

我想知道String中是否有引号。在上面的示例字符串中,Whole Lotta Love是引号。

我尝试了什么:

我的第一种方法是匹配两个双引号之间的任何内容,所以我想出了以下正则表达式:

"\"(\\w+\")""\"(^\")"

但是这种方法只有在两个双引号之间没有空格时才有效,例如:

"Whole" Lotta Love

所以我试着修改我的正则表达式来匹配空格,这就是我迷路的地方。

我尝试了以下内容,但它们不匹配

"\"(\\w+?\\s+\")""\"(\\w+)(\\s+)\"""\"(\\w+)?(\\s+)\""

如果有人可以帮我弄清楚如何构建这个,我将不胜感激。

4 个答案:

答案 0 :(得分:4)

你几乎拥有它。您的正则表达式将匹配字母数字字符后跟空格,如下所示:

"Whole "

但之后没有任何字母数字字符。 zEro几乎是正确的,但你可能想要使用这样的捕获:

"\"([\\w\\s]+)\""

这匹配一个或多个[whitespace / alphanumeric]字符。请注意,字母数字包括_

如果你想更通用,你可以使用

"\"([^\"]+)\""

除了双引号外,还匹配所有。例如,"谁是谁?" (包括引号)将由第二个正则表达式匹配,但不与第一个正则表达式匹配,因为它包含标点符号。

答案 1 :(得分:2)

最简单的方法是让while循环查找输入中两个引号之间的任何内容,以便检查多个带引号的表达式。

这里我的例子接受两个引号之间的任何内容。您只能使用字母和空格进行优化。

String quotedTweet = "\"Whole Lotta Love\" - Led Zeppelin";
String unquotedTweet = "Whole Lotta Love from Led Zeppelin";
String multipleQuotes = "\"Whole Lotta Love\" - \"Led\" Zeppelin";
// commented Pattern for only alphabetics or spaces
// Pattern pattern = Pattern.compile("\"([\\p{Alpha}\\p{Space}]+?)\"");
Pattern pattern = Pattern.compile("\"(.+?)\"");
Matcher matcher = pattern.matcher(quotedTweet);
while (matcher.find()) {
    // will find "Whole Lotta Love"
    System.out.println(matcher.group(1));
}
matcher = pattern.matcher(unquotedTweet);
while (matcher.find()) {
    // will find nothing
    System.out.println(matcher.group(1));
}
matcher = pattern.matcher(multipleQuotes);
while (matcher.find()) {
    // Will find "Whole Lotta Love" and "Led"
    System.out.println(matcher.group(1));
}

修改此示例,评论的变体不会阻止引用的空格,如" "中所示。如果这是一个要求,请告诉我 - 在这种情况下,模式会更复杂一些。

输出:

Whole Lotta Love
Whole Lotta Love
Led

答案 2 :(得分:1)

您可以使用:

\"(?>\\w+ *)+\"

或zEro建议的角色类。

答案 3 :(得分:0)

[\w\s]+

我们可以使用它,因为我们需要分隔句子。例如,如果我们需要从"hi I am Sandun"中获取句子。 然后我们可以使用 "+[\w\s]+"