Регулярное выражение для захвата первого <p>HTML - PullRequest
0 голосов
/ 03 июня 2010

У меня есть следующее регулярное выражение:

(?:<(?<tag>\w*)>(?<text>.*)</\k<tag>>)

Я хочу, чтобы текст попал в первый элемент HTML.

например.

<p>This should capture</p>This shouldn't

Работает, но ...

<p>This should capture</p><p>This shouldn't</p>

Не работает. Как и следовало ожидать, он возвращает:

This should capture</p><p>This shouldn't

Я ломаю себе голову здесь. Как я могу просто выбрать ПЕРВЫЙ внутренний текст?

(я пытаюсь быть независимым от тегов, поэтому <strong>This should match</strong> одинаково подходит и т. Д.)

Ответы [ 3 ]

3 голосов
/ 03 июня 2010

Вы должны использовать HTML Agility Pack .

Например:

doc.DocumentNode.Descendants("p").First().InnerText
2 голосов
/ 03 июня 2010

Stop. Просто остановись. Если вы анализируете HTML, используйте анализатор HTML (или XML, если вы имеете дело с действительным XHTML). См. этот ответ для получения дополнительной информации.

1 голос
/ 03 июня 2010

Чтобы иметь не жадный * выбор, вы должны добавить? после *.

(?:<(?<tag>\w*)>(?<text>.*?)</\k<tag>>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...