[英]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.