2010/09/11(Sat) 15:31:39 編集(投稿者)
> MatchCollection を for ループで巡回して、それぞれの Match の Value を確認して、
> 合ってるならそのときのコレクションのインデックス(は 0 ベースだから +1 したりとか)。
コード化すると↓、もっと楽な方法があるかも。
int cnt = 1;
foreach (Match m in mc) {
if (m.Value == "for") break;
cnt++;
}
http://mop.fya.jp/te2/efia/27.html
追記:Linqを使ってみた。
const string s = "This is a sample code for regex.";
MatchCollection mc = Regex.Matches(s, @"[\S]+");
int i = 1;
var query = from Match v in mc select new { Index = i++, Value = v.Value };
int index = (from w in query where w.Value == "for" select w.Index).First();
MessageBox.Show(String.Format("Count = {0} , Index = {1}", mc.Count, index));
↓
追記:IndexOf変更してみた。
const string s = "This is a sample code for regex.";
MatchCollection mc = Regex.Matches(s, @"[\S]+");
List<string> ql = (from Match v in mc select v.Value).ToList<string>();
MessageBox.Show(String.Format("Count = {0} , Index = {1}", mc.Count, ql.IndexOf("for") + 1));