大量のデータを含むファイルがあります。そのファイル内には、説明という単語があります。その説明の後にのみ、二重引用符内にある行を読みたいです。例:説明:「キャスト指定の文字値が無効です」。
まず、単語の説明を検索します。次に、「キャスト仕様の無効な文字値」という行を読む必要があります。
どうやってやるの?
正規表現を使用します。この場合、Regex.Matchはうまく機能するはずです。
using System.Text.RegularExpressions;
...
public static readonly REGEX_QUOTEFINDER = @"{0}\s*""(?<QUOTE>([^""]+))""";
public static string ReadQuotedString(string blob, string key)
{
return Regex.Match(
blob,
string.Format(REGEX_QUOTE, Regex.Escape(key))
).Groups["QUOTE"].Value;
}
...
string result = ReadQuotedString(File.ReadAllText("c:/test.txt"), ":Description:");
上記のようなものでおそらくうまくいくでしょう。
var data = @"key:""desc""
key2: ""d2""
key2: ""d2""";
var keyValues = Regex
.Matches(data, @"^(?<key>.*?): *""(?<value>.*)""", RegexOptions.Multiline)
.Cast<Match>()
.Select(m => new{
key = m.Groups["key"].Value,
value = m.Groups["value"].Value});
foreach(var kv in keyValues)
{
Console.WriteLine("{0} : {1}", kv.key, kv.value);
}