正则表达式,发现两个词

问题描述:

我这串之间的单词正则表达式,发现两个词

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

什么,我试图做的是提取“礼”标签中所有的“P”的标签,而不是“P”标签在它之外。

我只能这么远 由

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

提取所有的“礼”的标签,我在如何在其中提取“P”标签丢失。

任何指针都非常感谢它!

+0

http://*.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2010-03-05 22:29:18

+6

解析HTML使用HTML解析器。 HTML不是“常规语言”,因此无法用正则表达式正确解析。 – 2010-03-05 22:31:49

试试这个,它使用超前,使得LI不是选择的一部分。

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

P.S.你还需要修正你的HTML,因为你有P标签的方式是不正确的。正则表达式适用于下面的HTML。

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

谢谢詹姆斯!你和pinda是好的!非常感谢! – Liming 2010-03-05 22:50:21

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

将匹配<li>之间的所有内容也包含一个<p/>。如果你只是想匹配<p/>则:

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

将有1场比赛中<p/>标签。

+0

你和詹姆斯是Regx Nija!非常感谢 – Liming 2010-03-05 22:49:36

使用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")); 
+0

感谢标记。实际上,我从一堆文本中解析出bbcode,在转换bbcode的最后一次迭代之后,文本出现了,所以我需要做一些清理工作。但是,谢谢你的建议。 – Liming 2010-03-05 22:51:53