这是我的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>
我想获得font-weight值,如果有的话。我如何用正则表达式做到这一点?
答案 0 :(得分:2)
这应该解决它
(?<=font-weight: )[0-9A-Za-z]+(?=;)
阐释:
(?<=font-weight: )
结果前面的字符串必须是 font-weight:
[0-9A-Za-z]+
结果只包含字母和数字,至少包含一个
(?=;)
结果后的第一个字符是;
<强>代码:强>
string Pattern = @"(?<=font-weight: )[0-9A-Za-z]+(?=;)";
string Value = "<p style=\"opacity: 1; color: #000000; font-weight: bold; font-style: italic; text-decoration: line-through; background-color: #ffffff;\">100 gram n!uts</p>";
string Result = Regex.Match(Value, Pattern).Value; //bold
答案 1 :(得分:0)
如果您计划将来使用某些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);
}
}
请注意,运行正则表达式替换现在非常安全,因为我们只有一个普通的短字符串,没有可选的引号,也没有可用的标记。
如果您需要加载网址,请使用
var cq = CsQuery.CQ.CreateFromUrl("http://www.example.com");
这比使用难以阅读的this regex更安全,并且可能会因输入大量文本而失败:
<p\s[^<]*\bstyle="[^<"]*\bfont-weight:\s*([^"<;]+)