C# Regex标记之间多次出现文本

C# Regex标记之间多次出现文本,c#,regex,C#,Regex,我需要得到一个字符串,该字符串仅由一对已定义标记之间的文本组成,还需要一个字符串,该字符串由包含标记的文本组成。由于文本驻留在HTML标记中,和被解释为和(据我所知,这使得不可能使用HTML Agility Pack这样的解析器) 因此,输入字符串如下所示: Text outside of tags <internal> First occurance of text inside of tags </internal> Mor

我需要得到一个字符串,该字符串仅由一对已定义标记之间的文本组成,还需要一个字符串,该字符串由包含标记的文本组成。由于文本驻留在HTML
标记中,被解释为
(据我所知,这使得不可能使用HTML Agility Pack这样的解析器)

因此,输入字符串如下所示:

Text outside of tags
<internal>    First occurance of text inside of tags    </internal>
More text outside of tags
<internal>    Second occurance     </internal>
(\<internal\>(.*?)\</internal\>)
我现在正在使用以下代码,但它只获取第一个实例,而不获取第二个实例:

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

foreach (Match match in matches)
{
    string outerMatch = match.Groups[1].Value;
    string innerMatch = match.Groups[2].Value;
}

又是这样的问题

不要将regualr表达式用于标记标识。 正则表达式是无状态的,不能与HTML或XML一起正确运行。您需要为此使用解析器


使用fot HTML解析。

再次回答这样的问题

不要将regualr表达式用于标记标识。 正则表达式是无状态的,不能与HTML或XML一起正确运行。您需要为此使用解析器

使用fot HTML解析。

使用
\
而不是

像这样:

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;
(\<internal\>(.*?)\</internal\>)
(\(.*?)
使用
\
而不是

像这样:

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;
(\<internal\>(.*?)\</internal\>)
(\(.*?)

哦,代码确实有效。它没有发现第二种情况的原因是,在某些情况下,编辑器正在为标记中的文本创建插入的文档和标记,这使得正则表达式无法匹配它。我将正则表达式更改为:

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

无论如何谢谢你

哦,代码确实有效。它没有发现第二种情况的原因是,在某些情况下,编辑器正在为标记中的文本创建插入的文档和标记,这使得正则表达式无法匹配它。我将正则表达式更改为:

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

无论如何谢谢你

你确定我能做到吗?我尝试使用HTML Agility Pack,但由于
被解释为它们的实体号´´´和´´´´,因此无法捕获这些标记。@Christerwilliamperson:如果使用XML,请使用适当的库来处理它。我实际上使用HTML Agility Pack来获取内部文本。但是这个文本被解释为文本而不是节点,因此实体编号,从而使得在剩下的操作中使用解析器变得不可能/更难我猜你确定我能做到吗?我尝试使用HTML Agility Pack,但由于
被解释为它们的实体号´´´和´´´´,因此无法捕获这些标记。@Christerwilliamperson:如果使用XML,请使用适当的库来处理它。我实际上使用HTML Agility Pack来获取内部文本。但是,此文本被解释为文本而不是节点,因此实体编号,因此无法在其余操作中使用解析器/我猜尖括号不是正则表达式元字符,不需要转义。您在我的系统中的代码工作成功(WindowsPhone7.1)。您使用的是
System.Text.RegularExpressions.RegexOptions.Singleline
?@Ria它真的捕获了这两种情况吗?事实上,我使用的是单线选项(在我上面的代码中也可以看到)@christerwilliampersson是的。捕获这两种情况。尖括号不是正则表达式元字符,不需要转义。您在“我的系统”中的代码工作成功(WindowsPhone7.1)。您使用的是
System.Text.RegularExpressions.RegexOptions.Singleline
?@Ria它真的捕获了这两种情况吗?事实上,我使用的是单线选项(在我上面的代码中也可以看到)@christerwilliampersson是的。捕捉两种情况。