2011-02-04 2 views
1

私は、正規表現内のグループに基づいて、以下のIDの文字列を分割しようとしています:Regex.Splitはどのようにグループで作業するときに機能しますか?

string id = "aBcDe-fghIj-KLmno-pQRsT-uVWxy"; 
string regex = "^([a-z]{5}-){4}([a-z]{5})$"; 

Regex idRegex = new Regex(regex, RegexOptions.IgnoreCase); 
var match = idRegex.Match(id); 
var split = idRegex.Split(id); 

split文字列配列内の結果のグループは、次のとおりです。

pQRsT- 
uVWxy 

それが唯一の最後のようです正規表現内の最初のグループに一致するインスタンスが文字列配列に残ります。

Regex.Splitを使用してこのグループのすべてのインスタンスを返すことはできますか?

文字列の配列が含まれるように:

aBcDe- 
fghIj- 
KLmno- 
pQRsT- 
uVWxy 

答えて

2

をごRegex.Matchを使用する場合は、返されたマッチオブジェクトは、グループのリストが含まれ、各グループは、キャプチャのリストを持っています。グループコレクション内のグループは、閉じ括弧の位置によって順序付けされ、グループのキャプチャは入力文字列内での位置によって順序付けされます。 「 - 」

// untested code 
Match match = idRegex.Match(id); 

if(match.Success) 
{ 
    foreach (Group group in match.Groups) 
    { 
     foreach(Capture capture in group.Captures) 
     { 
      // do something with capture.Value 
     } 
    } 
} 
+0

パーフェクト、私は、各グループのキャプチャのリストが存在することを知りませんでした!ご協力いただきありがとうございます。 – fletcher

+0

Thanks @fletcher、私はパオロテデスコの答えは、あなたの質問の言葉でより正確かもしれないと思う:) –

1

私はあなたが物事を混合している...

Splitはすなわち、たとえば、あなたが上で分割した場合ので、あなたは、提供パターンを除去するサブストリングに分割、文字列を分割すると思います。

foreach (string s in Regex.Split("aBcDe-fghIj-KLmno-pQRsT-uVWxy", "-")) { 
    Console.WriteLine(s); 
} 

あなたは文字のグループ、なしあなたが引数として使用される文字列を分割することになるだろう:

別の例として、区切り記号としてスペースを使用してセンテンスを分割すると、そのセンテンス内の単語が取得されます。

そうでない場合は、との手紙のグループを取得するために「 - 」最後に、あなたがマッチのために検索する必要があるでしょう:

foreach (Match m in Regex.Matches("aBcDe-fghIj-KLmno-pQRsT-uVWxy", @"\w{5}-?")) { 
    Console.WriteLine(m.Value); 
} 
関連する問題