こんにちは私は、htmlファイルがたくさんあり、私はそれからいくつかの情報を抽出する必要があります、例えば、デバイスのモデル番号を抽出するために、私は以下の正規表現のコードを使用します:
string sFullString = "Device:</span> <span id="model-value" category="model">DXE-9880</span></li>";
string sStart = "category="model">";
string sEnd = "<";
Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @").*(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase);
Match match = regex.Match(sFullString);
if (match.Success)
{
Console.WriteLine(match.Value);
}
期待される結果は "DXE-9880"ですが、常に "DXE-9880 </ span>"です。 最初のモデル番号ではなく、2番目の "<"がモデル番号の後にピックアップされるのはなぜですか?
回答:
回答№1は1あなただけの中に作る .*
に .*?
なぜなら .*
可能な限りすべての文字に一致する貪欲です。
Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @").*?(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase);
または
ネゲートされたcharクラスを使用します。
Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @")[^<>]*(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase);
[^<>]*
任意の文字にマッチしますが、 <
または >
、0回以上。