■53739 / inTopicNo.1) |
正規表現を用いたタブ区切りテキストの抽出 |
□投稿者/ OROCHI (12回)-(2010/09/25(Sat) 18:37:52)
|
分類:[C#]
OS:XP
VS2005で作成
こんにちは。
現在以下のようなタブで区切られたテキストファイルから数値を抽出するためのプログラムを作っています
// 以下、テキストファイル
0.1\t0.5\t-0.009\r\n
0.2\t0.7\t0.001\r\n
ということで、以下のようなRegexを用いた正規表現を用いて行おうとしました(spritで最初やったのですが、見かけは分断できるのですが内部処理で分断できなかったので断念しました)
// 参考は:http://dobon.net/vb/dotnet/string/regex.html
// 対象のファイルを開く(sがファイルの名前)
System.IO.StreamReader cReader = (new System.IO.StreamReader(s, System.Text.Encoding.Default));
// 読み込んだ結果をすべて格納するための変数を宣言する
string stResult = string.Empty;
// 読み込みできる文字がなくなるまで繰り返す
while (cReader.Peek() >= 0)
{
// ファイルを 1 行ずつ読み込む
string stBuffer = cReader.ReadLine();
// ここで、ファイルの保存形式から(数値)\tか\t(数値)を条件とすれば(ダブりはするが)抽出できると思い、以下のような条件で行いました
// ちなみに1行目のstBufferの値は0.1\t0.5\t-0.009となります(デバッガのポップアップ)
//(数値)\tを条件とした場合
System.Text.RegularExpressions.Regex r2 =
new System.Text.RegularExpressions.Regex(
@"(.*?)\t",
System.Text.RegularExpressions.RegexOptions.IgnoreCase
| System.Text.RegularExpressions.RegexOptions.Singleline);
System.Text.RegularExpressions.MatchCollection mc2 = r2.Matches(stBuffer);
foreach (System.Text.RegularExpressions.Match m2 in mc2)
{
Console.WriteLine("タグ:" + m2.Groups[1].Value
+ "\nタグ内の文字列:" + m2.Groups[2].Value
+ "\nタグの位置:" + m2.Groups[1].Index);
}
// \t(数値)を条件とした場合
System.Text.RegularExpressions.Regex r3 =
new System.Text.RegularExpressions.Regex(
@"\t(.*?)",
System.Text.RegularExpressions.RegexOptions.IgnoreCase
| System.Text.RegularExpressions.RegexOptions.Singleline);
//TextBox1.Text内で正規表現と一致する対象をすべて検索
System.Text.RegularExpressions.MatchCollection mc3 = r3.Matches(stBuffer);
foreach (System.Text.RegularExpressions.Match m3 in mc3)
{
//正規表現に一致したグループと位置を表示
Console.WriteLine("タグ:" + m3.Groups[1].Value
+ "\nタグ内の文字列:" + m3.Groups[2].Value
+ "\nタグの位置:" + m3.Groups[1].Index);
}
}
が、何故かm3の中身が全て空になってしまい、\t(数値)の場合の検索結果を求めることができません
(m2での処理をやらなくても結果は同じ)
ということで
・m3の結果が出ない原因
・ダブらずに検索する条件
が解る方、知恵をお貸しいただけないでしょうか?
|
|