C# 使用正则表达式解析html元关键字

C# 使用正则表达式解析html元关键字,c#,html,regex,parsing,dom,C#,Html,Regex,Parsing,Dom,我需要使用正则表达式解析html元关键字。源字符串的格式始终相同,如: <meta name="description" content="description text"> <meta name="keywords" content="Keyword1, Keyword2, Keyword3..."> <link rel="alternate" type="application/xml+rss" href="http://example.com/rss">

我需要使用正则表达式解析html元关键字。源字符串的格式始终相同,如:

<meta name="description" content="description text">
<meta name="keywords" content="Keyword1, Keyword2, Keyword3...">
<link rel="alternate" type="application/xml+rss" href="http://example.com/rss">


我习惯于将关键字1、关键字2和关键字3作为列表来获取,正则表达式对于解析HTML文件来说不是一个好的选择

HTML不严格,格式也不规则

使用

您可以使用此代码使用
HtmlAgilityPack

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://yourWebSite.com");

List<String> keyLst= doc.DocumentNode
                        .SelectSingleNode("//meta[@name='keywords']")
                        .Attributes["content"].Value
                        .Split(',').ToList();
HtmlWeb=newhtmlweb();
HtmlDocument doc=web.Load(“http://yourWebSite.com");
List keyLst=doc.DocumentNode
.SelectSingleNode(“//meta[@name='keywords']”)
.属性[“内容”].值
.Split(',').ToList();

keyLst
现在包含所有关键字

正则表达式不是解析HTML文件的好选择

HTML不严格,格式也不规则

使用

您可以使用此代码使用
HtmlAgilityPack

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("http://yourWebSite.com");

List<String> keyLst= doc.DocumentNode
                        .SelectSingleNode("//meta[@name='keywords']")
                        .Attributes["content"].Value
                        .Split(',').ToList();
HtmlWeb=newhtmlweb();
HtmlDocument doc=web.Load(“http://yourWebSite.com");
List keyLst=doc.DocumentNode
.SelectSingleNode(“//meta[@name='keywords']”)
.属性[“内容”].值
.Split(',').ToList();

keyLst
现在包含所有关键字

我希望我可以发表评论,而不是将此作为答案提交,但我的代表太低了:(

我理解有时需要执行正则表达式,但正如其他人所建议的,最好使用标准的XML或HTML解析器。它更安全,可以包含意外的输入变化,甚至更快


请参阅:

我希望我可以发表评论,而不是将此作为答案提交,但我的代表级别太低:(

我理解有时需要执行正则表达式,但正如其他人所建议的,最好使用标准的XML或HTML解析器。它更安全,可以包含意外的输入变化,甚至更快

请参阅:

说明 如果您正在寻找一个简单的正则表达式解决方案,并且您的输入并不复杂,那么您可以试试这个

]*\bname=[“]关键字[“][^>]*\bcontent=([“”)(((?:[^,>“”],?){1,})\1[>]
,它将提取内容字段中的值

第1组是开放报价,然后需要在价值结束时关闭。 第2组是可以在逗号上拆分的内容

免责声明 这个表达式在一些简单的边缘情况下可能会失败,这就是为什么不应该使用正则表达式来解析HTML,而应该使用HTML解析引擎

C#示例
使用系统;
使用System.Text.RegularExpressions;
名称空间myapp
{
一班
{
静态void Main(字符串[]参数)
{
String sourcestring=“要与模式匹配的源字符串”;
Regex re=new Regex(@“]*\bname=[”“]关键字[”“][^>]*\bcontent=([''”“])(((?:[^,>'],?){1,})\1[>],RegexOptions.IgnoreCase);
MatchCollection mc=re.Matches(sourcestring);
int mIdx=0;
foreach(在mc中匹配m)
{
对于(int gIdx=0;gIdx阵列
(
[0] => 
)
[1] =>阵列
(
[0] => "
)
[2] =>阵列
(
[0]=>关键字1、关键字2、关键字3。。。
)
)
说明 如果您正在寻找一个简单的正则表达式解决方案,并且您的输入并不复杂,那么您可以试试这个

]*\bname=[“]关键字[“][^>]*\bcontent=([“”)(((?:[^,>“”],?){1,})\1[>]
,它将提取内容字段中的值

第1组是开放报价,然后需要在价值结束时关闭。 第2组是可以在逗号上拆分的内容

免责声明 这个表达式在一些简单的边缘情况下可能会失败,这就是为什么不应该使用正则表达式来解析HTML,而应该使用HTML解析引擎

C#示例
使用系统;
使用System.Text.RegularExpressions;
名称空间myapp
{
一班
{
静态void Main(字符串[]参数)
{
String sourcestring=“要与模式匹配的源字符串”;
Regex re=new Regex(@“]*\bname=[”“]关键字[”“][^>]*\bcontent=([''”“])(((?:[^,>'],?){1,})\1[>],RegexOptions.IgnoreCase);
MatchCollection mc=re.Matches(sourcestring);
int mIdx=0;
foreach(在mc中匹配m)
{
对于(int gIdx=0;gIdx阵列
(
[0] => 
)
[1] =>阵列
(
[0] => "
)
[2] =>阵列
(
[0]=>关键字1、关键字2、关键字3。。。
)
)

不要使用正则表达式。请使用类似HTMLPasser的正则表达式。不要使用正则表达式。请使用类似HTMLPasser的正则表达式。