1

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

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

示例输入字符串:

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

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

问题陈述:

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

我试过的:

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

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

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

"Whole" Lotta Love

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

我尝试了以下方法,但它们不匹配

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

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

4

4 回答 4

4

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

"Whole "

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

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

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

如果你想更一般,你可以使用

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

这将匹配除双引号之外的所有内容。例如,“谁先上?” (包括引号)将与第二个正则表达式匹配,但不会与第一个匹配,因为它包含标点符号。

于 2013-07-11T06:32:06.423 回答
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
于 2013-07-11T06:31:48.410 回答
1

你可以使用这个:

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

或 zEro 建议的字符类。

于 2013-07-11T06:30:13.287 回答
0
[\w\s]+

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

于 2020-06-04T07:59:24.177 回答