2013-05-24 3 views
0

Мне нужно разобрать html мета ключевые слова с помощью регулярных выражений. Исходная строка всегда в таком же формате, как:Анализ ключевых слов html с помощью regex

<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"> 

Я не буду получать KEYWORD1, keyword2 и KEYWORD3 в виде списка < строка>

+1

Не следует использовать регулярное выражение. Используйте HTMLParser, например [HTMLAgilityPack] (http://nuget.org/packages/HtmlAgilityPack). – Romoku

ответ

1

Regex не является хорошим выбором для разбора HTML файлы ..

HTML не является строгим и не является регулярным с его форматом ..

Использование htmlagilitypack

Вы можете использовать этот код Загружать ieve всех ключевых слов с помощью 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(); 

keyLst теперь содержат все ключевые слова

0

Я хотел бы прокомментировать вместо представления это как ответ, но мой представитель слишком низкий :(

Я понимаю необходимость иногда выполнять регулярное выражение, но, как рекомендует все остальные, просто рекомендуется использовать стандартный синтаксический анализатор XML или HTML. Это безопаснее с точки зрения включения непреднамеренных входных изменений и может быть даже быстрее.

См: https://stackoverflow.com/a/701177/1002098

2

Описание

, если вы ищете простое решение регулярных выражений и ваш вклад не является сложным, то вы можете попробовать это

<meta\b[^>]*\bname=["]keywords["][^>]*\bcontent=(['"]?)((?:[^,>"'],?){1,})\1[>], который будет тянуть значение в содержимого.

enter image description here

Группа 1 является открытой цитатой, которая затем будет необходимо закрыть в конце значения. Группа 2 - это содержимое, которое затем можно разбить на запятую.

Отказ

Это выражение может не на некоторых простых случаях краевых именно поэтому регулярное выражение не следует использовать для разбора HTML, вместо этого вы должны смотреть, чтобы использовать HTML Анализ двигатель.

C# Пример

using System; 
using System.Text.RegularExpressions; 
namespace myapp 
{ 
    class Class1 
    { 
     static void Main(string[] args) 
     { 
      String sourcestring = "source string to match with pattern"; 
      Regex re = new Regex(@"<meta\b[^>]*\bname=[""]keywords[""][^>]*\bcontent=(['""]?)((?:[^,>""'],?){1,})\1[>]",RegexOptions.IgnoreCase); 
      MatchCollection mc = re.Matches(sourcestring); 
      int mIdx=0; 
      foreach (Match m in mc) 
      { 
      for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++) 
       { 
       Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value); 
       } 
      mIdx++; 
      } 
     } 
    } 
} 

$matches Array: 
(
    [0] => Array 
     (
      [0] => <meta name="keywords" content="Keyword1, Keyword2, Keyword3..."> 
     ) 

    [1] => Array 
     (
      [0] => " 
     ) 

    [2] => Array 
     (
      [0] => Keyword1, Keyword2, Keyword3... 
     ) 

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