C# 入門 & 実践 / C sharp
4-21. 正規表現 / RegularExpressions - 3 - Captures
検索グループのキーが重なった場合の値取得方法です。
static void Main()
{
int i ;
int cnt ;
string str = @"Microsoft .Net Frameword 2.0
Microsoft .Net Frameword 2.0 日本語 Language Pack
Visual C# 2005 Express Edition
Microsoft SQL Server 2005 Express Edition x86";
// Regex : 正規表現
// 単語 + スペースが2個連続で続く場合を調べる
Regex myRegex = new Regex(@"((?<tango>[A-Z][a-z]+)\s){2}");
Console.WriteLine("// MatchCollection で全対象を検索");
// MatchCollection で全対象を検索
MatchCollection mc = myRegex.Matches(str);
cnt = mc.Count;
Console.WriteLine("■□■ 2 重単語 ■□■\n対象が {0} 個見つかりました。", cnt);
if (cnt > 0)
{
StringBuilder sb = new StringBuilder();
for ( i = 0; i < cnt; i++)
{
Match m = mc[i];
// この場合はどちらかしかない。
if (m.Groups["tango"].Success)
{
// 単純に表示
Console.WriteLine("{0} Tango : {1}", i, m.Groups["tango"].Value);
// Captures を利用すると取り出せます!
// tango は2個有るはずです。
int c_cnt = m.Groups["tango"].Captures.Count;
Console.WriteLine("\t captuers.count : {0}", c_cnt);
foreach (Capture cap in m.Groups["tango"].Captures)
{
Console.WriteLine("\t : {0}", cap.Value);
}
}
}
}
}
// MatchCollection で全対象を検索
■□■ 2 重単語 ■□■
対象が 5 個見つかりました。
0 Tango : Frameword
captuers.count : 2
: Net
: Frameword
1 Tango : Frameword
captuers.count : 2
: Net
: Frameword
2 Tango : Pack
captuers.count : 2
: Language
: Pack
3 Tango : Edition
captuers.count : 2
: Express
: Edition
4 Tango : Edition
captuers.count : 2
: Express
: Edition
とこのように、2重に検索した場合、Captures に対象が入っています^^。
一つ目は "Net Frameword " という連続文字列から Net と Frameword という tango を取得しています!
4-20. 正規表現 / RegularExpressions - 2 - グループ «
4. C# 入門 Level 2 »
4-22. 正規表現 / RegularExpressions - 4 - 置換 Replace / MatchEvaluator
C# 入門 & 実践 / C sharp