我試圖從字符串中移除所有短於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」是不是入門的正則表達式。我怎樣才能使它正常工作?
我試圖從字符串中移除所有短於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」是不是入門的正則表達式。我怎樣才能使它正常工作?
使用word boundary\b
代替,並刪除過短的一切話
s = s.replaceAll("\\b[a-z]{1,2}\\b", "");
您可以嘗試下面的基於正向lookahead的正則表達式。
string.replaceAll("\\s[a-z]{1,2}(?=\\s|$)|^[a-z]{1,2}\\s", "");
\\s[a-z]{1,2}(?=\\s|$)
匹配一個或兩個字母的單詞與前面的空格字符沿。
^[a-z]{1,2}\\s
匹配一個或兩個字母的單詞出現在一開始以及以下空格。
用空字符串替換匹配的字符將爲您提供所需的輸出。
它的工作原理爲您使用單詞邊界,而不是明確的起點,終點和空間? ['\ B \瓦特{1,2} \ B'](https://regex101.com/r/bK6wU2/2) –