2011-10-17 25 views
1

我想弄清楚將從字符串中獲取單詞的模式。例如說我的字符串是:C#正則表達式模式獲取單詞

string text = "HI/how.are.3.a.d.you.&/{}today 2z3"; 

我試圖在1個字母或數字,以消除任何東西,但它不工作:

Regex.Split(s, @"\b\w{1,1}\b"); 

我也試過這樣:

Regex.Splits(text, @"\W+"); 

但它輸出:

「你好今天怎麼樣」

我只是想獲得所有的話,使我最終的字符串是:

「HI你今天怎麼」

+1

通過解決這個問題,你沒有得到所有單詞的列表,只有所有的2+字母單詞。你會排除單個字母的單詞,如「一」,「我」等。這是打算? – Gibron

+0

同意Gibron。單字母單詞是有效的單詞。 –

回答

4

若要取得至少2個字符的所有單詞長期以來,您可以使用此模式:\b[a-zA-Z]{2,}\b

string text = "HI/how.are.3.a.d.you.&/{}today 2z3"; 
var matches = Regex.Matches(text, @"\b[a-zA-Z]{2,}\b"); 
string result = String.Join(" ", matches.Cast<Match>().Select(m => m.Value)); 
Console.WriteLine(result); 

正如其他人在評論中指出的,「A」和「I」是有效的單詞。如果你決定要匹配,你可以使用這個模式來代替:

var matches = Regex.Matches(text, @"\b(?:[a-z]{2,}|[ai])\b", 
          RegexOptions.IgnoreCase); 

在我使用\b匹配字邊界兩個模式。如果您有諸如「1abc2」的輸入,那麼「abc」將不匹配。如果您希望它匹配,則刪除元字符\b。從第一種模式這樣做很直接。第二種模式將更改爲[a-z]{2,}|[ai]

+0

你真的需要'\ b'嗎? –

+0

@ liho1eye我不需要它們作爲給定的輸入,所以也許它們可以省略。如果OP有一些輸入,例如「1abc2」,當前模式將忽略「abc」字。如果不需要,那麼可以刪除'\ b'元字符以匹配它。 –

+0

我猜對於什麼單詞是持續的混淆。對我來說「1abc2」是一個有效的詞,儘管可能不適用於OP。 –