2016-03-21 27 views
0

我對正則表達式很陌生,我正在爲一個小項目努力工作,這對我的項目非常有幫助。我想知道如何計算(連續)驚歎號序列組。例如讓我們考慮下面的字符串正則表達式匹配感嘆號java

String s = "OMG!!!, i love Computers !!!! and this !!! is really good!" 

這裏的計數應該返回3.我嘗試以下,但它沒有什麼像什麼,我想 公共靜態INT感嘆號(字符串列表)拋出異常{

String[] words = (list.split("\\s+")); 
    Pattern pattern = Pattern.compile("\\*?(!!)*\\b"); 
int count = 0; 
for(String s:words) 
{  
    Matcher matcher = pattern.matcher(s);  
    if(pattern.matcher(s) != null) 
    { 
     System.out.println(s); 

    } 
} 

return count; 

}

+1

使用反向引用。 ['(!)\ 1 +'](https://regex101.com/r/fV3kT6/1) – Tushar

+0

您的預期輸出是什麼? –

+0

@AvinashRaj @AvinashRaj這裏的打印函數是用來查看我是否通過嘗試打印它來匹配正確的東西,但它所做的只是打印純文本(我在一個龐大的數據集上測試這個),不確定是否它忽略了標點符號,並在此之前打印這個詞,這顯然是瘋狂的 – Bobby

回答

1

你的正則表達式不會打印任何!因爲\b。您的正則表達式期望!旁邊會出現一個單詞字符,但實際上,在!之後沒有單詞字符,但是沒有單詞字符空間。

Pattern pattern = Pattern.compile("\\*?(!{2,})"); 

Pattern pattern = Pattern.compile("!{2,}"); 

DEMO

+0

它似乎並不在JAVA中有效:(我正在嘗試修復它 – Bobby

+0

對不起,現在檢查.. –

+0

這是正確的正則表達式,但我仍然無法計算字符串中有多少字符,我更改了'print'並增加了每場比賽後的計數器,但它給了我這樣的數字,甚至沒有接近是正確的 – Bobby