2014-09-24 12 views
0

У меня есть значение я вытягивать из базы данныхRegex для получения значений между двойными кавычками

<iframe width="420" height="315" src="//www.youtube.com/embed/8GRDA1gG8R8" frameborder="0" allowfullscreen></iframe> 

Я пытаюсь получить СРК в качестве значения с помощью регулярных выражений.

Regex.Match(details.Tables["MarketingDetails"].Rows[0]["MarketingVideo"].ToString(), "\\\"([^\\\"]*)\\\"").Groups[2].Value 

, который, как я в настоящее время пишу это

Как я пишу это, чтобы вытащить правильное значение СРК?

+0

Почему вы хотите использовать 'Regex' здесь? Поскольку у него есть структура XML, почему бы не передать его экземпляру 'XDocument'? –

+1

[Obligitory «не анализировать html с регулярным выражением») (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags). Действительно, вместо этого используйте парсер html. – gunr2171

+0

Конечно, это HTML, глупый я. В последнее время я работаю с XML! Лучше использовать синтаксический анализатор HTML. –

ответ

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

Не используйте регулярное выражение для разбора xml или html. Это не стоит. Я дам вам читать this post, и это похоже на выражение, но главное, чтобы иметь в виду, вы можете столкнуться с множеством проблем с регулярным выражением и html.

Итак, вместо этого вы должны использовать действительный html/xml парсер! Для начала используйте XElement, класс, встроенный в инфраструктуру .net.

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; 

Этот анализатор более терпим для недействительных или неправильных (или просто нерегулярными) входов. Это полностью проанализирует ваш исходный ввод (так что отсутствует ='').

+0

http://msdn.microsoft.com/en-us/library/ie/dn312070(v=vs.85).aspx в соответствии с microsoft, allowfullscreen является истинным, когда он существует, и false, когда он не существует, нет значения для назначения. – Zack

+0

@ Zack, обновленный, чтобы включить парсер html, который правильно проанализирует исходный ввод. – gunr2171

+0

Добавить ссылку для загрузки HTML-магии? http://htmlagilitypack.codeplex.com/ – Zack

Смежные вопросы