2017-10-14 18 views
1

"t1 v2"の形式の文字列があります。C#Unityの正規表現

Regex regex = new Regex("t([0-9])"); 
MatchCollection matches = regex.Matches(options); 
if (matches.Count > 0) { 
    foreach (Match match in matches) { 
     CaptureCollection captures = match.Captures; 
     Debug.Log(captures[0].Value); 
    } 
} 

を、私はいくつか他のものを試してみたが、それは常に「t1は」私はそれが「1」を返す必要がありますし、私はかなりまっすぐ進むようだ、イムがやって、TおよびVの後の番号が必要。

私はここで何が欠けていますか?

+0

また、「v」付近の数字が足りない。これを試してみてください: ['[tv] \ K \ d'](https://regex101.com/r/fL5CH7/1) 出力はグループ分けで完全一致します –

答えて

3

あなたが何かを欠落していない、あなただけの結果から、右のキャプチャを選択する必要があります。

 var options = "t1 v2"; 

     var result = Regex.Matches(options, "[a-zA-Z]([0-9]+)").Cast<Match>().Select(x => int.Parse(x.Groups[1].Value)).ToList(); 
     Console.WriteLine(string.Join(";", result));//1;2 

以上にまっすぐ進む

 result = Regex.Matches(options, "[a-zA-Z](?<foo>[0-9]+)", RegexOptions.ExplicitCapture).Cast<Match>().Select(x => int.Parse(x.Groups["foo"].Value)).ToList(); 
     Console.WriteLine(string.Join(";", result));//1;2 

と言及することが重要あなたの正規表現のクエリ(、クエリで't32'などの文字列が欠けている):

 result = Regex.Matches(options, "t([0-9])").Cast<Match>().Select(x => int.Parse(x.Groups[1].Value)).ToList(); 
     Console.WriteLine(string.Join(";", result));//1