Здравейте имам много 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);
[^<>]*
съответства на всеки знак, но не на <
или >
, нула или повече пъти.