2013-06-12 62 views
1

我需要一個只有單詞的明文,不包括所有數字,額外的空格,破折號,逗號,圓點,括號等。它用於單詞生成算法(取自gamasutra )。我猜想正則表達式可以在這裏幫助。我怎樣才能在String.split的幫助下做到這一點?使用正則表達式來'清理'字符串

UPD:

輸入:我有1337這樣的,在它不同的東西的字符串:逗號,很多空間,數字 - 2 3 4,破折號。我怎樣才能刪除所有的東西?

輸出:我有不同的東西,這樣的字符串在它的逗號很多空格的數字破折號如何刪除所有的東西

+0

可能重複的[通過正則表達式通過標點符號和空白等在java中分割字符串](http://stackoverflow.com/questions/7384791/splitting-strings-through-regular -expressionions by-punctuation-and-whitespace-etc) –

+1

請添加一個輸入文本和預期輸出文本的例子。 – pepuch

回答

2

分兩步你可以這樣做:

String s = "asd asd asd.asd, asd"; 
String clean = s.replaceAll("[\\d[^\\w\\s]]+", " ").replaceAll("(\\s{2,})", " "); 
System.out.println(clean); 

第一步移除所有不是字母或空格的字符,並用空格替換它們。第二步只用一個空格刪除多個空格。

輸出:

ASD ASD ASD ASD ASD


如果你需要的是一個包含字的陣列,那麼這將是不夠的:

String[] words = s.trim().split("[\\W\\d]+"); 
+1

'\ w'也包含數字,OP也想刪除它們。 – stema

+0

@stema我修改了。無論如何,你的方法更好(+1)。 – assylias

1

我會做這樣

str = str.replaceAll("\\s+", " "); 
    str = str.replaceAll("\\p{Punct}|\\d", ""); 
    String[] words = str.split(" "); 
+0

這不會從文本中刪除數字。 – stema

2

如果你關心Unicode(你應該),那麼使用Unicode properties

String[] result = s.split("\\P{L}+"); 

\p{L}是任何語言的字母的Unicode屬性。

\P{L}是否定\p{L},意味着它將匹配所有不是字母的東西。 (我明白這是你想要的。)

相關問題