2017-02-09 10 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(sentence); 'あなたの記載された要件を満たすでしょう... – JohnLBevan

+0

あなたは正確に何をしようとしていますか?期待どおりの出力に基づいて、スペースだけで分割したいように見えます。私はあなたがなぜ正規表現のすべてのものを持っているのかは分かりません。あなたは 'words [0]'、 'words [1]'などで何を見たいと思っていますか? – smead

答えて

0

コードを次のように変更すると、目的の結果が返されます。 Split()メソッドは、入力に基づいて文字列を分割し、配列を返します。より複雑な分割要件の場合、正規表現分割はより良いでしょう。

あなたが出力をしたいと仮定すると、
string sentence = ".a -w =e ?a"; 
string[] words = sentence.Split(' '); 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 
0

:、E、W、:

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) 

は言葉


[^\s]+

enter image description here

の配列を返します。これは ない ^スペース \sある [...]をセットから何かを一致させると言います。 +これらの文字のうちの1つ以上(スペースではない文字)。私は複数の行に正規表現の分割を使用して問題に実行しているの落とし穴について、現在はほぼ10年前に、ブログの記事を書いた


注意。

Regex Split Pitfalls Over Multiple Lines