正则表达式按标签分割

时间:2013-03-07 15:15:23

标签: c# regex

我有一个文本文件:

<page>
Line 1
Hello World
<endpage>
<page>
Another page
<endpage>

现在,我想将此文本拆分为<page><endpage> - 标记。我用以下正则表达式尝试了它:

Regex regex = new Regex(@"<page>.*?<endpage>");
MatchCollection matchCollection = regex.Matches(text);

但只有在<page><endpage>之间没有换行符时,这才有效。什么是正确的正则表达式来解决我的问题?

2 个答案:

答案 0 :(得分:5)

为了能够使用.*匹配多行,您需要启用RegexOptions.Singleline选项:

Regex regex = new Regex(@"<page>.*?<endpage>", RegexOptions.Singleline);

答案 1 :(得分:1)

默认情况下,.与换行符不匹配。这意味着只有当所有内容都出现在同一行上时,您的模式才会匹配。

为了使它在多行之间匹配,你需要RegexOptions.Singleline(名称有点混乱,但想法是整个字符串被视为“单行”,而不是通过和测试每行的正则表达式。)