Regex Parsing Начало строки

1

У меня есть строка, и я хотел бы проанализировать ее с помощью регулярного выражения. .. указывает название категории и все после : - это контент для этой категории.

Ниже приведена полная строка, которую я пытаюсь проанализировать:

..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 отсутствует содержимое на второй и третьей строках.

Как я могу изменить свой шаблон, чтобы получить правильную группировку?

Теги:
parsing
regex-group

2 ответа

1
Лучший ответ

. соответствует всем, кроме новой строки (на большинстве языков Ruby является одним исключением). Используйте RegexOptions.Singleline в С# (или модификатор s в PCRE).


Вам нужно будет сделать свой .* Ленивый до следующего .. или конец строки $ чтобы вы не соответствовали всему в первый раз. Кроме того, . не имеет особого значения в классе персонажей... ваше выражение может выглядеть более чистым:

[.]{2}[A-Z0-9]{2,4}:.*?(?=[.]{2}|$)

Демос: Regex и С#

  • 0
    Спасибо! Однако это все еще не решает проблему, когда группа 3 получает только первую строчку. Моя цель - получить все 3 строки для группы 3. Также я использую C #.
  • 0
    @ sora0419 извините! Я имел в виду Singleline не Multiline Я не очень разбираюсь в C #, и я неправильно прочитал документы. Я добавил демо-версию C # .
Показать ещё 2 комментария
1

Мне удалось добиться этого с отрицательным взглядом на [.]{2}:

[.]{2}[A-Z0-9]{2,4}:(.*\n?(?![.]{2}))*
  • 0
    Ваше решение работает, спасибо большое!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню