[英]Regex match and substring in one?
我有一个HTML源作为输入,并且想知道该网站是用什么CMS制成的。许多CMS都将其名称保留在这样的元标记中:
<meta name="Generator" content="MY CMS" />
我可以得到这样的结果:
Match match = Regex.Match(html, ".*(?i)meta.*generator.*");
match = Regex.Match(match.ToString(), "content.*\".*\"");
match = Regex.Match(match.ToString(), "\".*\"");
给我“我的CMS”
但是有什么方法可以将其缩短为一个Regex.Match吗?
请注意,meta标签可能是这样的:
<meta content="MY CMS" name="Generator" />
谢谢和最好的问候
var regex = new Regex(@"<meta\s+name=""Generator""\s+content=""([^""]+)""", RegexOptions.IgnoreCase);
var match = regex.Match(html);
var generator = match.Groups[1].Value;
请尝试以下操作:
Regex regex = new Regex(@"<meta[^>]+content\s*=\s*['"]([^'"]+)['"][^>]*>");
Match match = regex.Match(input);
该值在组1中。
希望能帮助到你。
正则表达式不是解析HTML文件的好选择。
HTML既不严格也不规范其格式。
正则表达式用于正则表达式NOT 不规则表达式
您可以使用此代码通过HtmlAgilityPack
进行检索
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var content= doc.DocumentNode
.SelectSingleNode("//meta[@name='Generator']")
.Attributes["content"].Value;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.