按标签分割的正则表达式

本文关键字:正则表达式 分割 标签 | 更新日期: 2023-09-27 18:02:41

我有一个textfile:

<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>之间没有换行时才有效。什么是正确的正则表达式来解决我的问题?

按标签分割的正则表达式

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

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

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

为了使它在多行之间匹配,您需要RegexOptions.Singleline(名称有点令人困惑,但其思想是将整个字符串视为"单行",而不是遍历和测试每一行的正则表达式)。