2015-05-03 6 views
1

Мой код: Regex("([A-Za-z0-9]{5})=([^\n]+)", RegexOptions.Compiled);Regex новой строки выбора

Пример текста:

ab94c=some text here a6u4c=sample text here sample text continues. it contains a newline character. gh94c=some more text here

Это то, что я получаю: https://regex101.com/r/cN6gJ5/1

Это то, что я хочу: what I want

Every текст имеет идентификатор. Я хочу захватить идентификатор и каждый символ до следующего идентификатора. Я хочу, чтобы создать массив, как это:

массив [ab94c] = некоторый текст здесь

массив [a6u4c] = образец здесь текст

образец текста продолжается. он содержит символ новой строки.

массив [gh94c] = больше какой-то текст здесь

+0

Так что проблема сейчас? –

+0

Вы проверили ссылку regex101, которую я дал? Он не захватывает вторую строку строки. – Wellenbrecher

+0

Действительно, я сделал, я нахожу три матча, как и ожидалось! –

ответ

2

Вы можете использовать ниже положительный предпросмотр на основе регулярных выражений. только

@"(?s)(?:^|\n)([A-Za-z0-9]{5})=(.*?)(?=\n[A-Za-z0-9]{5}=|$)" 

DEMO

  • Если вы используете DOTALL модификатора (?s), в регулярном выражении, ^ матчей старт самого первой строки.

  • Так что это (?:^|\n) соответствует началу самой первой линии или новой строки,

  • , который существует до ([A-Za-z0-9]{5})= 5 буквенно-цифровых символов и символа в =. И это фиксирует буквы alphanum.

  • Теперь (.*?) будет делать нежадным матч из нуля или более символов до

    1. \n[A-Za-z0-9]{5}= символ новой строки, а затем 5 alphanum символов плюс = знак достигается. OR

    2. $ линии линии. Здесь $ соответствует концу последней строки только с тех пор, как мы используем модификатор DOTALL.

+0

Это то, что я хочу. Спасибо. – Wellenbrecher

+0

Как вы получаете экранный снимок ожидаемого выхода? –

+0

с навыками MS Paint – Wellenbrecher

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