2009-09-26 115 views
8

那麼,我正在尋找一個Java中的正則表達式,刪除短於3個字符的所有單詞。 我認爲像\s\w{1,2}\s這樣的東西會抓住所有1和2字母的單詞(一個空格,一到兩個單詞字符和另一個空格),但它不起作用。 我錯在哪裏?刪除短於n的所有單詞的正則表達式

+0

字符串中的所有單詞短於3還是一次一個單詞? – 2009-09-26 00:09:05

+0

單一段落中的所有單詞,我只是不需要它們。 – janesconference 2009-09-26 00:13:15

回答

11

我已經很好地工作了,但它花了兩個通過。

public static void main(String[] args) { 
    String passage = "Well, I'm looking for a regexp in Java that deletes all words shorter than 3 characters."; 
    System.out.println(passage); 

    passage = passage.replaceAll("\\b[\\w']{1,2}\\b", ""); 
    passage = passage.replaceAll("\\s{2,}", " "); 

    System.out.println(passage); 
} 

第一遍替換包含少於三個字符與單個空間中的所有字。請注意,我必須在字符類中包含撇號,因爲「我」這個詞在沒有它的情況下給我帶來麻煩。您可以在文本中找到其他需要在此處添加的特殊字符。

第二關是必要的,因爲第一關留下了雙空間的幾個位置。這隻會將所有出現的2個或更多空間摺疊爲一個。這取決於你是否需要保持這一點,但我認爲空間崩潰會更好。

輸出:

嗯,我正在尋找Java中的正則表達式是刪除所有單詞短於3個字符。

那麼,尋找regexp Java刪除短於字符的所有單詞。

+0

是的,這個工程很好。 – janesconference 2009-09-26 00:54:45

+0

僅供參考 - 它會使「不能相信它」=> 「可以相信它」 – krinker 2014-09-17 00:04:25

1

嘗試:\b\w{1,2}\b雖然你仍然必須擺脫出現的雙重空間。

3

如果你不想空白匹配做,你可能想使用

\b\w{1,2}\b 

得到了這個詞的邊界。

這對我在RegexBuddy中使用Java風格起作用;對於測試字符串

「狗是一個有趣的貓」

它強調了「是」和「a」。對於行的開始/結尾處的單詞也是如此。

您可能想要發佈代碼示例。

(而且,正如GameFreak剛剛發佈,您還是會落得雙空格。)

編輯:

\b\w{1,2}\b\s? 

是另一種選擇。這將部分解決空間剝離問題,儘管字符串末尾或標點後面的單詞仍可能導致問題。例如,「狗是否有趣?」變成「狗的樂趣?」無論如何,你仍然會遇到大寫字母問題(狗現在應該是Dog)。

+0

請在downvoting時發表評論。我在撰寫這篇文章的同時,GameFreak發佈了他的答案;我沒有簡單地複製它。 – TrueWill 2009-09-26 00:21:54

+0

我改變了你。 – janesconference 2009-09-26 00:42:29

+0

謝謝@janesconference! :) – TrueWill 2009-09-26 00:49:58

1

如果你有一個這樣的字符串:

hello there my this is a short word 

此正則表達式匹配字符串大於或等於長度爲3個字符的所有單詞:

\w{3,} 

結果造成:

hello there this short word 

對我而言,這是最簡單的方法。爲什麼試圖匹配你不想要的東西,什麼時候能夠比較容易地匹配你想要的東西?沒有雙重空間,沒有剩菜,並且標點符號在您的控制之下。其他方法在多個空間中打破,並且不是很健壯。

+0

這似乎是一個好主意,但我目前使用GWT並且只有String類正則表達式方法。所以我可以拆分我的字符串或替換我的正則表達式,但我不知道如何獲得我只匹配的東西:( – janesconference 2009-09-26 00:36:57

相關問題