2017-02-09 27 views
1

我的代碼是C#正則表達式分裂忽略的人物,如「=」,「 - 」

string sentence = ".a -w =e ?a"; 
string[] words = Regex.Split(sentence, @"(?![-\/.:~+=!>?])\W+"); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 

輸出.a w e a,但我希望它輸出.a -w =e ?a

我在編碼所以任何幫助會有點無能非常感激。

+1

如果你是新來的編碼,它是一個更容易使用'String.Split'到你想捕捉什麼之間的空白空間分割。 'sentence.Split('');'。 – Tim

+1

您要輸出的字符串與您輸入的字符串匹配;請你能澄清你希望做什麼?即當前'string sentence =「.a -w = e?a」; Console.WriteLine(句子);'會符合你要求的要求... – JohnLBevan

+0

你想要做什麼?根據您的預期輸出,它看起來像要用空格分開。我不確定爲什麼你在正則表達式中擁有所有這些東西。你究竟希望用「詞[0]」,「單詞[1]」等來看待? – smead

回答

0

如下所示修改代碼將返回所需的結果。 Split()方法將根據輸入拆分字符串並返回一個數組。正則表達式拆分對於更復雜的拆分要求會更好。

string sentence = ".a -w =e ?a"; 
string[] words = sentence.Split(' '); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 
0

假設你要輸出:A,W,E,A:

string sentence = ".a -w =e ?a"; 
string[] words = Regex.Split(sentence, @"[\W_]+"); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 

此拆分上的任何東西,這不是一個字母或數字。

說明

  • \W =不是一個字母,數字或下劃線(見http://regexlib.com/CheatSheet.aspx?AspxAutoDetectCookieSupport=1
  • _ =因爲我們只希望用我們的話字母或數字,還包括下劃線的文字以拆分
  • [ ... ] - 這表示要拆分\W_;而不是\W緊接着是_
  • + - 這表示如果有多個拆分字符按順序將它們視爲1;即a - b結果爲a,b而不是a ,,, b
+0

''['''''是不會分裂的記號。這是一套,它將分裂... – OmegaMan

0

您不需要使用Split,但可以簡單地匹配任何非空格。

Regex.Matches(".a -w =e ?a", @"[^\s]+") 
    .OfType<Match>() 
    .Select(mt => mt.Value) 

將返回的話

enter image description here


[^\s]+數組表示匹配任何從這組[...]這是^空間\s+這些字符中的一個或多個(不是空格的字符)。


注意,我幾乎十年前寫了一篇博客文章,現在,關於使用多條線路上的正則表達式分裂和運行到問題的陷阱。

Regex Split Pitfalls Over Multiple Lines