Разделение заголовка на отдельные части - PullRequest
0 голосов
/ 04 октября 2009

Мне нужно разделить строку вида

2,9.1,The Godfather (1972), (это линия csv)

до:

2
9.1
The Godfather
1972

есть идеи для хорошего регулярного выражения?

КСТАТИ, если вы знаете хорошего создателя регулярных выражений, основанного на примерах, вы бы это прекрасно сочли. Я немного новичок в этом ..

10x !!

Ответы [ 5 ]

4 голосов
/ 04 октября 2009
(\d+)\.(\d+\.\d+),(.*?)(?= \()\((\d{4})\)
^^^^^  ^^^^^^^^^^ ^^^^^^^^^^^^  ^^^^^^^
2      9.1        Title        Year
1 голос
/ 04 октября 2009

Я бы не рекомендовал использовать регулярные выражения для разделения CSV-файлов, так как он плохо обрабатывает экранирование запятой. Но сказав это, как насчет использования простейшего из доступных решений?

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

'(.*?),(.*?),(.*?)\((\d+)\)'
0 голосов
/ 04 октября 2009

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

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

0 голосов
/ 04 октября 2009

Если вы уверены, что формат является статическим, вы можете использовать это:

(\d+),(\d+\.\d+),(.*?) \((\d+)\)

Но если он может содержать больше информации, используйте реальный анализатор CSV, чтобы прочитать строку, а затем просто разделите The Godfather (1972), используя (.*?) \((\d+)\).

0 голосов
/ 04 октября 2009

Немного времени с Google дал мне это: /,(?!(?:[^",]|[^"],[^"])+")/. Кажется, что разделить CSV просто отлично.

>>> '2,9.1,The Godfather (1972)'.split(/,(?!(?:[^",]|[^"],[^"])+")/)
["2", "9.1", "The Godfather (1972)"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...