/ / .Net Regex за извличане на текст - .net, regex

.Net Regex за извличане на текст - .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". Защо втората "<" е взета след номера на модела, а не първата?

Отговори:

1 за отговор № 1

Просто правете междубанковете .* да се .*? защото .* е алчен, който съвпада с всички знаци колкото е възможно повече.

Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @").*?(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase);

ИЛИ

Използвайте класа с отрицателна характеристика.

Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @")[^<>]*(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase);

[^<>]* съответства на всеки знак, но не на < или >, нула или повече пъти.