Регулярное выражение, найти слово между двумя словами - PullRequest
1 голос
/ 06 марта 2010

У меня есть эта строка

<p/><ul><li>test1<p/></li><li>test2<p/></li></ul><p/>

То, что я пытаюсь сделать, это извлечь весь тег "p" внутри тега "li", но не тег "p" вне его.

Я могу пока только извлечь все теги "li" с помощью

\<li\>(.*?)\</li\>

Я заблудился, как извлечь из него тег "p".

Любой указатель высоко ценится!

Ответы [ 3 ]

5 голосов
/ 06 марта 2010

Гораздо надежнее использовать анализатор HTML вместо регулярного выражения. Использовать HTML-пакет Agility Pack :

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("<p/><ul><li>test1<p/></li><li>test2<p/></li></ul><p/>");
IEnumerable<HtmlNode> result = doc.DocumentNode
                                  .Descendants("li")
                                  .SelectMany(x => x.Descendants("p"));
2 голосов
/ 06 марта 2010

Попробуйте, он использует прогноз, так что LI не является частью выбора.

(?<=<li>)(.*?<p/?>.*?)(?=</li>)

PS Вы также должны исправить свой HTML, потому что способ, которым у вас есть P-теги, неправильный.Regex работает над этим HTML ниже.

<ul><li><p>test1<p/></li><li><p>test2<p/></li></ul>
2 голосов
/ 06 марта 2010
<li>(.*?<p/?>.*?)</li>

Будет соответствовать весь контент между <li>, который также содержит <p/>. Если вы просто хотите соответствовать <p/>, тогда:

(?<=<li>).*?(<p/?>).*?(?=</li>)

Группа 1 будет соответствовать тегу <p/>.

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