正则表达式在标记之间多次出现文本

时间:2012-07-06 08:56:24

标签: c# regex

我需要获取一个字符串,该字符串仅包含 之间的文本 一对已定义的标记以及包含 文本的字符串< / em> 标签。由于文字位于HTML <p> 标记内,因此&lt; &gt; 的解释类似于&lt;和{{ 1}}(据我所知,这使得无法像HTML Agility Pack一样使用解析器)

所以输入字符串如下所示:

&gt;

我现在正在使用以下代码,但它只获得第一次出现而不是第二次出现:

Text outside of tags
&lt;internal&gt;    First occurance of text inside of tags    &lt;/internal&gt;
More text outside of tags
&lt;internal&gt;    Second occurance     &lt;/internal&gt;

3 个答案:

答案 0 :(得分:1)

这个问题再次出现。

不要使用regualr表达式来识别标签。 正则表达式是无状态的,无法使用HTML或XML正确运行 。你需要使用Parser。

使用Agility pack fot HTML解析。

答案 1 :(得分:1)

哦,代码实际上有效。它没有发现第二次出现的原因是在某些情况下,正在创建文档的编辑器和标签内部的文本标签,这使得正则表达式无法与之匹配。我把正则表达式改为:

Regex regex = new Regex(@"(&lt;.*?internal.*?&gt;(.*?)&lt;.*?/.*?internal.*?&gt;)", RegexOptions.Singleline);

非常感谢!

答案 2 :(得分:-1)

使用\<\>代替&lt;&gt;

像这样:

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