Выражение регулярного выражения для разделения строки на элементы - PullRequest
2 голосов
/ 03 декабря 2008

У меня есть текст в виде

[1/12/2008 2:32:11 p.m. - name]
line 1
[1/12/2008 2:36:00 p.m. - name] - PRIVATE
line 2 [some text] sd
[1/12/2008 2:36:00 p.m. - name]
line 3

которые я хочу разделить на элементы, чтобы у меня был доступ ко времени, названию и тексту каждого элемента,

e.g.:
(item 1)
  1: 1/12/2008 2:32:11 p.m.
  2: name
  3: line 1
(item 2)
  1: 1/12/2008 2:36:00 p.m.
  2: name
  3:  - PRIVATE
    line 2 [some text] sd
(item 3)
  1: 1/12/2008 2:36:00 p.m.
  2: name
  3: line 3

Я пытался придумать единый шаблон регулярных выражений для достижения этой цели, но не повезло:

\[([0-9\/ \:\.apm]+?) - ([a-z_\-0-9]+?)\](.*?\r\n.+?)(?:\[[0-9\/ \:\.apm]+? - [a-z_\-0-9]+?\])

Этот шаблон выше возвращает только первый элемент.

\[([0-9\/ \:\.apm]+?) - ([a-z_\-0-9]+?)\](.*?\r\n.+?)(?!\[[0-9\/ \:\.apm]+? - [a-z_\-0-9]+?\])

Приведенный выше шаблон возвращает все элементы, но только первый символ текста (группа 3)

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 03 декабря 2008

Похоже, это дает вам то, что вы хотите.

\[([0-9\/ \:\.apm]+?) - ([a-z_\-0-9]+?)\](.*?\r\n.+.*?)

Я проверил его на моем тестере RegEx , и, похоже, он получил правильный формат.

0 голосов
/ 03 декабря 2008

Не совсем ответ, но есть инструмент под названием expresso, который может вам помочь.

http://www.ultrapico.com/expresso.htm

...