/ /。ネット正規表現をテキストを抽出する - .net、正規表現

.net正規表現でテキストを抽出する - .net、regex

こんにちは私は、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回以上。