正则表达式在双引号之间获取值

时间:2014-09-24 19:12:38

标签: c# regex

我有一个从数据库中提取的值

 <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值?

2 个答案:

答案 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;

此解析器对无效或不正确(或仅仅是不规则)输入更加宽容。这将很好地解析您的原始输入(因此错过了='')。