簡體   English   中英

Java正則表達式匹配單詞+空格

[英]Java Regex to Match words + spaces

我正在嘗試構建這個簡單的正則表達式來匹配 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+)\\""

如果有人能幫我弄清楚如何構建這個,我將不勝感激。

你幾乎擁有它。 您的正則表達式將匹配字母數字字符后跟空格,如下所示:

"Whole "

但之后沒有任何字母數字字符。 zEro 幾乎是正確的,但您可能想要使用這樣的捕獲:

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

這匹配一個或多個 [whitespace/alphanumeric] 字符。 請注意,字母數字包括_

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

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

它將匹配除雙引號之外的所有內容 例如,“誰先上?” (包括引號)將與第二個正則表達式匹配,但不會與第一個匹配,因為它包含標點符號。

最簡單的方法是使用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

你可以使用這個:

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

或 zEro 建議的字符類。

[\w\s]+

我們可以使用它,因為我們需要分隔句子。 例如,如果我們需要從"hi I am Sandun"抓取句子。 然后我們可以使用"+[\\w\\s]+"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM