我有一个从数据库中提取的值
<iframe width="420" height="315" src="//www.youtube.com/embed/8GRDA1gG8R8" frameborder="0" allowfullscreen></iframe>
我正在尝试使用正则表达式将src作为值。
Regex.Match(details.Tables["MarketingDetails"].Rows[0]["MarketingVideo"].ToString(), "\\\"([^\\\"]*)\\\"").Groups[2].Value
这就是我目前的写作方式
我如何写这个以获取正确的src值?
答案 0 :(得分:1)
你可以这样做......
Match match = Regex.Match( @"<iframe width=""420"" height=""315"" src=""//www.youtube.com/embed/8GRDA1gG8R8"" frameborder=""0"" allowfullscreen></iframe>", @"src=(\""[^\""]*\"")");
Console.WriteLine (match.Groups[1].Value);
然而,正如其他人已经对你的问题发表了评论......最好使用实际的html解析器。
答案 1 :(得分:1)
不要使用正则表达式来解析xml或html。这不值得。我会让你阅读this post,这有点夸大了这一点,但要记住的主要事情是你可以用正则表达式和HTML进行很多麻烦。
所以,你应该使用实际的 html / xml解析器!对于初学者,请使用内置于.net框架中的XElement
类。
string input = "<iframe width=\"420\" height=\"315\" src=\"//www.youtube.com/embed/8GRDA1gG8R8\" frameborder=\"0\" allowfullscreen=''></iframe>";
XElement html = XElement.Parse(input);
string src = html.Attribute("src").Value;
这会使src
的值为//www.youtube.com/embed/8GRDA1gG8R8
。然后,您可以将其拆分以从中获得所需的任何内容。
我还应注意您的输入无效 xml 。 allowfullscreen
没有附加值,这就是我添加=''
。
如果您需要更复杂,例如输入,请使用HTML解析器(XElement
适用于xml)。像这样使用Html Agility Pack(使用前面的例子):
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(input);
string src = doc.DocumentNode
.Element("iframe")
.Attributes["src"]
.Value;
此解析器对无效或不正确(或仅仅是不规则)输入更加宽容。这将很好地解析您的原始输入(因此错过了=''
)。