Если вы планируете использовать некоторые HTML-парсер в будущем, вы можете захотеть взглянуть на CsQuery. Просто установите пакет NuGet для своего решения и используйте его, как показано в моем фрагменте ниже.
var html = "<p style=\"opacity: 1; color: #000000; font-weight: bold; font-style: italic; text-decoration: line-through; background-color: #ffffff;\">100 gram n!uts</p>";
var cq = CsQuery.CQ.CreateFragment(html);
foreach (var obj in cq.Select("p"))
{
var style = string.Empty;
var has_attr = obj.TryGetAttribute("style", out style);
if (has_attr)
{
// Using LINQ and string methods
var fontweight = style.Split(';').Where(p => p.Trim().StartsWith("font-weight:")).FirstOrDefault();
if (!string.IsNullOrWhiteSpace(fontweight.Trim()))
Console.WriteLine(fontweight.Split(':')[1].Trim());
// Or a regex
var font_with_regex = Regex.Replace(style, @".*?\bfont-weight:\s*([^;]+).*", "$1", RegexOptions.Singleline);
Console.WriteLine(font_with_regex);
}
}
Обратите внимание, что запуск замены регулярных выражений вполне в безопасности, так как у нас есть только простую короткая строка, без каких-либо дополнительных кавычек, ни теги заботиться.
Если вам нужно загрузить URL, используйте
var cq = CsQuery.CQ.CreateFromUrl("http://www.example.com");
Это действительно намного безопаснее, чем при использовании this regex, который трудно читать и, скорее всего, потерпит неудачу с огромным ввода текста:
<p\s[^<]*\bstyle="[^<"]*\bfont-weight:\s*([^"<;]+)
С помощью HTML Parser. Считаете ли вы его одним? –
@stribizhev нет, мне нужно сделать это с помощью регулярного выражения –
@petko_stankoski, почему ты * нужен * для этого с регулярным выражением? Регулярные выражения не могут анализировать каждый вход, а текст HTML - это один из случаев, когда разбор работает только в ограниченных случаях. –