2015-06-03 42 views
0

我試圖從字符串中移除所有短於3個符號的單詞。我有以下代碼在java中的正則表達式,共享符號

String s = "a abc ab ab ab abc ab"; 
s = s.replaceAll("(^|\\s)([a-z]{1,2})(\\s|$)", "$1$3"); 

我運行它,但輸出是

abc ab abc 

我想存在的問題,因爲3個字「AB AB AB」共享同一個空格和這就是爲什麼第二個「AB」是不是入門的正則表達式。我怎樣才能使它正常工作?

+0

它的工作原理爲您使用單詞邊界,而不是明確的起點,終點和空間? ['\ B \瓦特{1,2} \ B'](https://regex101.com/r/bK6wU2/2) –

回答

1

使用word boundary\b代替,並刪除過短的一切話

s = s.replaceAll("\\b[a-z]{1,2}\\b", ""); 
0

您可以嘗試下面的基於正向lookahead的正則表達式。

string.replaceAll("\\s[a-z]{1,2}(?=\\s|$)|^[a-z]{1,2}\\s", ""); 

DEMO

  • \\s[a-z]{1,2}(?=\\s|$)匹配一個或兩個字母的單詞與前面的空格字符沿。

  • ^[a-z]{1,2}\\s匹配一個或兩個字母的單詞出現在一開始以及以下空格。

  • 用空字符串替換匹配的字符將爲您提供所需的輸出。