簡體   English   中英

Java(Regex) - 獲取句子中的所有單詞

[英]Java (Regex) - Get all words in a sentence

我需要將一個java字符串拆分成一個單詞數組。 我們說這個字符串是:

"Hi!! I need to split this string, into a serie's of words?!"

目前我嘗試使用這個String[] strs = str.split("(?!\\\\w)")然而它保留了諸如的符號! 在數組中,它還保留像“嗨!”這樣的字符串。 在數組中也是如此。 我分裂的字符串將始終為小寫。 我希望生成的數組看起來像: {"hi", "i", "need", "to", "split", "this", "string", "into", "a", "serie's", "of", "words"} - 注意保留撇號。

我怎么能改變我的正則表達式不包括數組中的符號?

道歉,我會將一個單詞定義為一個字母數字字符序列但是如果它在上面的上下文中是“包含”,例如“它是”,而不是用於引用諸如“'它'”之類的單詞。 。 此外,在這種情況下,“hi”或“hi-person”不是單詞,而是“hi”和“person”。 我希望澄清這個問題。

你可以刪除所有?! 符號然后分成單詞

str = str.replaceAll("[!?,]", "");
String[] words = str.split("\\s+");

結果:

Hi, I, need, to, split, this, string, into, a, serie's, of, words

應該為你想要的工作。

String line = "Hi!! I need to split this string, into a serie's of words?! but not '' or ''' word";
String regex = "([^a-zA-Z']+)'*\\1*";
String[] split = line.split(regex);
System.out.println(Arrays.asList(split));

[Hi, I, need, to, split, this, string, into, a, serie's, of, words, but, not, or, word]

如果將單詞定義為非空白字符序列(由\\s定義的空白字符),則可以沿空格字符分割:

str.split("\\s+")

請注意, ";.';.@#$>?>@4""very,bad,punctuation""'goodbye'"是上述定義下的單詞。

然后另一種方法是將一個單詞定義為一組允許的字符中的字符序列。 如果您想允許azAZ'作為單詞的一部分,您可以分割其他所有內容:

str.split("[^a-zA-Z']+")

但是,這仍然允許將"''''''"定義為單詞。

您可以過濾掉您認為是“非單詞”字符的字符:

String[] strs = str.split("[,!? ]+");

我會用str.split("[\\\\s,?!]+") 您可以在括號[]內添加要拆分的任何字符。

所以你想要的是分裂任何不是字字符[a-zA-Z]的東西而不是'這個正則表達式會做那個'[^ a-zA-Z'] \\ s “如果有問題,如果該字符串包含引用的引用

我通常使用此頁面來測試我的正則表達式http://www.regexplanet.com/advanced/java/index.html

myString.replaceAll("[^a-zA-Z'\\s]","").toLowerCase().split("\\s+");

replaceAll("[^a-zA-Z'\\\\s]","")方法替換所有不是azAZ'或沒有whitespace"" )的字符然后toLowerCase方法使所有的字符從replaceAll方法返回小寫。 最后,我們根據空白字符串split字符串。 更具可讀性;

myString = myString.replaceAll("[^a-zA-Z'\\s]","");
myString = myString.toLowerCase();
String[] strArr = myString.split("\\s+");

暫無
暫無

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

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