Мне нужно разделить строку вида
2,9.1,The Godfather (1972), (это линия csv)
2,9.1,The Godfather (1972)
до:
2 9.1 The Godfather 1972
есть идеи для хорошего регулярного выражения?
КСТАТИ, если вы знаете хорошего создателя регулярных выражений, основанного на примерах, вы бы это прекрасно сочли. Я немного новичок в этом ..
10x !!
(\d+)\.(\d+\.\d+),(.*?)(?= \()\((\d{4})\) ^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^ 2 9.1 Title Year
Я бы не рекомендовал использовать регулярные выражения для разделения CSV-файлов, так как он плохо обрабатывает экранирование запятой. Но сказав это, как насчет использования простейшего из доступных решений?
Простейшее регулярное выражение, подобное этому, должно решить вашу проблему
'(.*?),(.*?),(.*?)\((\d+)\)'
CSV имеет много угловых случаев, ваш подход к регулярному выражению может привести вас в мир боли.
Например, если заголовок содержит запятую, заголовок будет заключен в двойные кавычки. Который облажался бы со всеми приведенными до сих пор регулярными выражениями.
Если вы уверены, что формат является статическим, вы можете использовать это:
(\d+),(\d+\.\d+),(.*?) \((\d+)\)
Но если он может содержать больше информации, используйте реальный анализатор CSV, чтобы прочитать строку, а затем просто разделите The Godfather (1972), используя (.*?) \((\d+)\).
The Godfather (1972)
(.*?) \((\d+)\)
Немного времени с Google дал мне это: /,(?!(?:[^",]|[^"],[^"])+")/. Кажется, что разделить CSV просто отлично.
/,(?!(?:[^",]|[^"],[^"])+")/
>>> '2,9.1,The Godfather (1972)'.split(/,(?!(?:[^",]|[^"],[^"])+")/) ["2", "9.1", "The Godfather (1972)"]