2009-06-25 6 views
1

これはおそらく非常に簡単な質問ですが、私は正しい解決策を見つけることができないようです。C#正規表現を使用して分割する方法(A:B = C)*

A:B=C;D:E=F;G:E=H;... 

文字列がありますが、A、BおよびCは英数字です(大文字と小文字が混在する可能性があります)。 AとBは長さが1+であり、Cは空であってもよい。

私は

((?<A>.+):(?<B>.+)=(?<C>.*);)* 

の線に沿って何かを使用する必要があると思いますが、私はそれが怠惰な方法で一致させるためにどのように表示されていない考え出しました。私はまた、それぞれの試合の結果を得る方法もわからないので、ちょっとしたコードサンプルをいただければ幸いです。

私にヒントを与えることができたらうれしいです。

+0

(より明確にし、必要性を指摘するように編集しますコードのために) – mafu

答えて

4

\wを使用すると、すべて一致する.ではなく英数字を一致させることができます。その後、あなたは、一度に1つの試合をキャプチャしようとする:ここでは

(?<A>\w+):(?<B>\w+)=(?<C>\w*); 

は小さな例です:

Regex regex = new Regex("(?<A>\\w+):(?<B>\\w+)=(?<C>\\w*);"); 
string test = "A:B=C;D:E=F;G:E=H"; 

// get all matches 
MatchCollection mc = regex.Matches(test); 

foreach (Match m in mc) { 
    Console.WriteLine("A = {0}", m.Groups["A"].Value); 
    Console.WriteLine("B = {0}", m.Groups["B"].Value); 
    Console.WriteLine("C = {0}", m.Groups["C"].Value); 
} 

は、ノート:もありますが、正規表現を試すことができるいくつかのツールがあり、何らかの助けを提供する。私は個人的にExpressoが好きです - それを試してみてください、それは学習に非常に便利です。

+0

リンクをありがとう、私は一見を持っています! – mafu

2
Regex r = new Regex("(?<A>\\w)+:(?<B>\\w)+=(?<C>\\w)*;"); 

\ wは、[a-zA-Z0-9_]に相当する英数字とアンダースコアに一致します。

バックスラッシュは文字列でエスケープされるため、¥¥wになります。

正規表現はグループA、B、およびCをキャプチャし、セミコロンで区切られたCまたはグループ全体の0個以上の要素と一致します。

あなたは複数のマッチオブジェクトを持っています:

MatchCollection m = r.Matches(sampleInput); 
// m[0] will contain A:B=C; 
// m[1] will contain D:E=F; 
// m[2] will contain G:E=H; 
// ... 
5

は、要件はRegexていますか?文字列が非常に構造化された、よく、構造を有しているので、正規表現せずにそれを解析するのは簡単です:

string input = "A:B=C;D:EF=G;E:H=;I:JK=L"; 
string[] elements = input.Split(new[] { ';' }); 
List<string[]> parts = new List<string[]>(); 
foreach (string element in elements) 
{ 
    parts.Add(element.Split(new[] { ':', '=' })); 
} 
// result output 
foreach (string[] list in parts) 
{ 
    Console.WriteLine("{0}:{1}={2}", list[0], list[1], list[2]); 
} 

出力は次のようになります。

A:B=C 
D:EF=G 
E:H= 
I:JK=L 
+0

Regexを使って1行でMatchオブジェクトのコレクションが得られたときに、Listでそれらを分割して混乱させるのはなぜですか? –

+0

これは必須条件ではありません。私は実際にstring.splitを使っていましたが、ちょっと肥大しているようでした。 – mafu

+0

代わりの方法を提示するだけです。私は時に正規表現が必要でないときに使用されるのを見る(自分自身の有罪)。テーブルに新しい言葉を持たないことが良いことになることがあります。 –

関連する問題