2016-01-10 2 views
2

Например, мы имеем следующие строки:Regex матч через несколько строк

Something 
AnotherThing 
Something AnotherThing 

Если я использую RegexOptions.Singleline с рисунком Something.+?AnotherThing тогда я получаю два матча, когда я хочу, чтобы соответствовать только первой и второй линии. Я хочу использовать что-то вроде FirstLine#endofline##startofline#AnotherLine. Поэтому я использую:

var regex = new Regex(@"Something$^AnotherThing", RegexOptions.Multiline); 

но не работает. Я знаю, что я могу использовать некоторые хаки с Singleline для соответствия первым двум строкам (а не последним), но вопрос: возможно ли даже совместить точные два текста в точном 2 строках без спецификатора Singleline, только с опцией Multiline? И почему он ведет себя так.

+1

Вы можете попробовать '^(Что-то [\ s] + AnotherThing) '.. – choz

+0

Он будет соответствовать последней строке тоже. См. Заметный ответ, он отвечает моим потребностям. –

ответ

4

Как насчет:

Something\r?\nAnotherThing 

\r? в случае, если строка не приходит от Windows.

Причина Something$^AnotherThing не работает с опцией RegexOptions.Multiline, потому, что ^ и $ матч в разрывы строк, а не линия ломает себя, так что следующий будет работать:

new Regex(@"Something$\r?\n^AnotherThing", RegexOptions.Multiline); 
+0

'$ \ r? \ N ^' будет работать, если есть только строка ('\ n'), но нет, если есть возврат каретки (' \ r \ n'). .NET является уникальным среди Perle-производных регулярных выражений, поскольку он распознает ** только ** '\ n' в качестве разделителя строк (стандарт Юникода [гораздо более инклюзивный] (http://www.unicode.org/reports/TR18/# Line_Boundaries)). Но какой бы вкус вы ни использовали, если вам все равно нужно сопоставить разделители строк, '^' и '$' просто беспорядочны. –

0

Попробуйте совместить символы возврата каретки и строки, например.

Something\r?\nAnotherThing 

В принципе, возврат каретки вызывает у вас проблемы (вы не одиноки). Знаете ли вы, с какой ОС выходит ваш текст? Если это из Windows, тогда перед \ n будет существовать \ r, для которого вам необходимо учесть.

+1

'\ r $' не работает в этом случае по той же причине '$ ^' не работает: вам нужно * потреблять * строку, но '$' просто утверждает, что Это здесь. –

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