2011-06-21 15 views
0

私はC#でRegexを使って解析する必要がある次の文字列を持っています。正規表現パターンC#

フォーマット:rec_mnd.rate.current_rate.sum。 QWD.RET:214345

私はgroupcollectionでグループオブジェクトとして私たちの大胆な文字を抽出したいと思います。

QWD = 1グループ RET = 1グループ 214345 = 1グループ

メッセージパターンがどのようなものでしょうか?それはこのようなものになるだろう

+0

これまでにどのようなパターンがありますか? – mdm

+0

参考のため、私はこのサイトが有用であることを発見しました。あなたが一致するものを取得すると、それはあなたにC#の正規表現を与えるhttp://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx – tom502

答えて

2

:最初の2つのグループに

string s = "Format: rec_mnd.rate.current_rate.sum.QWD.RET : 214345"; 
Match m = Regex.Match(s, @"^Format: rec_mnd\.rate\.current_rate\.sum\.(.+?)\.(.+?) : (\d+)$"); 
if(m.Success) 
{ 
    Console.WriteLine(m.Groups[1].Value); 
    Console.WriteLine(m.Groups[2].Value); 
    Console.WriteLine(m.Groups[3].Value); 
} 

疑問符は、数量詞は怠け者作る:それは文字の最小限の量をキャプチャします。つまり、最初に.が表示されるまでキャプチャします。または、これらのグループで([^.]+)を使用することもできます。これらのグループでは、ピリオド以外のすべてを明示的に取得します。

最後のグループは、明示的に10進数字のみをキャプチャします。あなたの式が:の右側に他の値を持つことができる場合は、それを.+に変更する必要があります。

0

これは、あなたの間に何があるかにかかわらず、あなたが望むものを与えるはずです。

@"(?:.+\.){4}(.\w+)\.(\w+)\s?:\s?(\d+)" 
1

コード内で何が起こっているのかを簡単に理解できるように、自分で簡単にラベルを付けてください。

RegEx myRegex = new Regex(@"rec_mnd\.rate\.current_rate\.sum\.(?<code>[A-Z]{3})\.(?<subCode>[A-Z]{3})\s*:\s*(?<number>\d+)"); 

var matches = myRegex.Matches(sourceString); 
foreach(Match match in matches) 
{ 
    //do stuff 
    Console.WriteLine("Match"); 
    Console.WriteLine("Code: " + match.Groups["code"].Value); 
    Console.WriteLine("SubCode: " + match.Groups["subCode"].Value); 
    Console.WriteLine("Number: " + match.Groups["number"].Value); 
} 
+0

私は通常それを行うが、私はcouldn彼の説明からグループの良い名前を考えないでください。 :) – Sven