У меня есть строка, и я хотел бы проанализировать ее с помощью регулярного выражения. ..
указывает название категории и все после :
- это контент для этой категории.
Ниже приведена полная строка, которую я пытаюсь проанализировать:
..NAME: JOHN
..BDAY: 1/1/2010
..NOTE: 1. some note 1
2. some note 2
3. some note 3
..DATE: 6/3/2014
Я пытаюсь разобрать его так, чтобы
(group 1)
..NAME: JOHN
(group 2)
..BDAY: 1/1/2010
(group 3)
..NOTE: 1. some note 1
2. some note 2
3. some note 3
(group 4)
..DATE: 6/3/2014 //a.k.a update date
Я использую регулярное выражение, которое я использую:
\.\.[A-Z0-9]{2,4}:.*
который делает (group 3)..NOTE: 1. some note 1
отсутствует содержимое на второй и третьей строках.
Как я могу изменить свой шаблон, чтобы получить правильную группировку?
.
соответствует всем, кроме новой строки (на большинстве языков Ruby является одним исключением). Используйте RegexOptions.Singleline
в С# (или модификатор s
в PCRE).
Вам нужно будет сделать свой .*
Ленивый до следующего ..
или конец строки $
чтобы вы не соответствовали всему в первый раз. Кроме того, .
не имеет особого значения в классе персонажей... ваше выражение может выглядеть более чистым:
[.]{2}[A-Z0-9]{2,4}:.*?(?=[.]{2}|$)
Мне удалось добиться этого с отрицательным взглядом на [.]{2}
:
[.]{2}[A-Z0-9]{2,4}:(.*\n?(?![.]{2}))*
Singleline
неMultiline
Я не очень разбираюсь в C #, и я неправильно прочитал документы. Я добавил демо-версию C # .