C # извлечение определенных частей строки - PullRequest
0 голосов
/ 23 октября 2009

У меня есть консольное приложение, которое анализирует HTML-документы с помощью метода WebRequest (http). Проблема действительно в извлечении данных из возвращаемого HTML-кода.

Ниже приведен фрагмент интересующего меня HTML-кода:

<span class="header">Number of People:</span>
<span class="peopleCount">1001</span>  <!-- this is the line we are interested in! -->
<span class="footer">As of June 2009.</span>

Предположим, что приведенный выше html содержится в строке с именем "responseHtml". Я хотел бы просто извлечь значение «Количество людей» (вторая строка).

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

Как извлечь текст из круглых скобок?

Но когда я его реализую, это не работает - я не думаю, что ему нравится то, как я поместил HTML-теги в регулярное выражение:

        string responseHtml; // this is already filled with html code above ^^
        string insideBrackets = null;


        Regex regex = new Regex("\\<span class=\"peopleCount\">?<TextInsideBrackets>\\w+\\</span>");

        Match match = regex.Match(responseHtml);
        if (match.Success)
        {
            insideBrackets = match.Groups["TextInsideBrackets"].Value;
            Console.WriteLine(insideBrackets);
        }

Вышеуказанное просто не работает, это как-то связано с скобками HTML-диапазона? Все, что я хочу, это текстовое значение между тегами для этого определенного диапазона.

Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 23 октября 2009

Попробуйте это:

Regex regex = new Regex("class=\\\"peopleCount\\\"\\>(?<data>[^\\<]*)",
RegexOptions.CultureInvariant
| RegexOptions.Compiled
);

Это должно быть немного быстрее, так как вы в основном говорите, что искомые данные начинаются после peopleCount "> и заканчиваются на первом <</p>

(я изменил название группы на данные)

Ура, Florian

3 голосов
/ 23 октября 2009

?<TextInsideBrackets> неверно

Вам нужно:

(?<TextInsideBrackets>...)
1 голос
/ 23 октября 2009

Я предполагаю, что вы хотите сделать именованный захват.

Вы должны использовать

Regex regex = new Regex("\\<span class=\"peopleCount\">(?<TextInsideBrackets>\\w+)\\</span>");

а не

Regex regex = new Regex("\\<span class=\"peopleCount\">?<TextInsideBrackets>\\w+\\</span>");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...