Парсинг документа HTML: Регулярное выражение или LINQ?

В XCode6 при создании нового проекта файл «pch» по умолчанию не создается, мне пришлось создать файл pch вручную, следуя PCH-файлу в Xcode 6

Я получил его после работы импорт заголовков в файл pch:

#import 
#import 

8
задан Community 23 May 2017 в 12:12
поделиться

3 ответа

Я бы порекомендовал регулярное выражение. Почему?

  • Гибкость (нечувствительность к регистру, простота добавить новые расширения файлов, элементы в проверка и т. д.)
  • Быстрая запись
  • Быстрая работа

Выражения регулярных выражений не будут трудно читать, если вы можете ЗАПИСАТЬ регулярные выражения.

используя это как регулярное выражение:

href = "([^"] * \. txt) "

Пояснение:

  • Он заключен в круглые скобки имя файла, что приведет к "захваченная группа", к которой вы можете получить доступ после каждого совпадения.
  • Он должен экранировать "." используя escape-символ регулярного выражения, обратная косая черта.
  • Он должен соответствовать любому символу, ЗА ИСКЛЮЧЕНИЕМ двойные кавычки: [^ "], пока не будет найдено
    ".txt"

переводится в экранированную строку следующим образом:

string txtExp = "href=\"([^\\\"]*\\.txt)\"

Затем вы можете перебирать свои совпадения:

Matches txtMatches = Regex.Matches(input, exp, RegexOptions.IgnoreCase);
foreach(Match m in txtMatches) {
  string filename = m.Groups[1]; // this is your captured group
}
1
ответ дан 5 December 2019 в 12:12
поделиться

Ни то, ни другое. Загрузите его в (X / HT) MLDocument и используйте XPath, который является стандартным и очень мощным методом управления XML. Обратите внимание на функции SelectNodes и SelectSingleNode .

Поскольку вы явно используете HTML (не XHTML), вам следует использовать HTML Agility Pack . Большинство методов и свойств соответствуют связанным классам XML.

Пример реализации с использованием XPath:

    HtmlDocument doc = new HtmlDocument();
    doc.Load(new StringReader(@"<html>
<head><title>Blah</title>
</head>
<body>
<br/>
<div>Here is your first text file: <a href=""http://myServer.com/blah.txt""></div>
<span>Here is your second text file: <a href=""http://myServer.com/blarg2.txt""></span>
<div>Here is your third text file: <a href=""http://myServer.com/bat.txt""></div>
<div>Here is your fourth text file: <a href=""http://myServer.com/somefile.txt""></div>
<div>Thanks for visiting!</div>
</body>
</html>"));
        HtmlNode root = doc.DocumentNode;
        // 3 = ".txt".Length - 1.  See http://stackoverflow.com/questions/402211/how-to-use-xpath-function-in-a-xpathexpression-instance-programatically
        HtmlNodeCollection links = root.SelectNodes("//a[@href['.txt' = substring(., string-length(.)- 3)]]");
    IList<string> fileStrings;
    if(links != null)
    {
        fileStrings = new List<string>(links.Count);
        foreach(HtmlNode link in links)
        fileStrings.Add(link.GetAttributeValue("href", null));
    }
    else
        fileStrings = new List<string>(0);
13
ответ дан 5 December 2019 в 12:12
поделиться

В качестве альтернативы предложению Мэтью Флашена, DOM (например, если вы страдаете от вспышки аллергии на X? L)

Иногда он получает плохую репутацию - я думаю, потому что реализации иногда забавны, а собственные интерфейсы COM немного громоздки без некоторых (незначительные ) умных помощников, но я нашел это надежным, стабильным и интуитивно понятным / доступным для исследования способом синтаксического анализа и управления HTML.

0
ответ дан 5 December 2019 в 12:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: