2013-03-07 2 views
-2

У меня есть текстовый файл, как:Regex разделить по тэгам

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

Теперь я хочу разделить этот текст в <page> и <endpage> -tags. Я попробовал его со следующим регулярным выражением:

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

, но это работает только, если нет LINEBREAK между <page> и <endpage>. Каково правильное регулярное выражение для решения моей проблемы?

+1

http://stackoverflow.com/a/1732454/496680 –

+2

@Steve - это действительно не применимо здесь. – Oded

+2

@CuongLe - Почему вы предполагаете, что это XML? – Oded

ответ

5

Чтобы быть в состоянии соответствовать несколько строк с .* вам необходимо включить опцию RegexOptions.Singleline:

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

Большое спасибо. Он отлично работает :) Я принимаю ответ в 11 минут -.- – Tomtom

1

По умолчанию . не соответствует символу новой строки. Это означает, что ваш шаблон будет соответствовать только если все произошло в одной строке.

Чтобы сделать это совпадением по нескольким строкам, вам нужно RegexOptions.Singleline (имя немного запутанно, но идея в том, что вся строка рассматривается как «одиночная строка», вместо того чтобы проходить и тестировать регулярное выражение на каждой строке).

Смежные вопросы