2013-04-22 3 views
0

У меня есть плоский файл (CSV) со значениями, разделенными "|", и я хотел бы преобразовать все числа в определенном формате «1 234 567,89» или « 1.123.456,89 "в" 1234567,89 "Анализ с использованием следующего формата (CSV-файл)

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

(\|\ *)([0-9]{0,3})(\.|\)?([0-9]{3})?(\.|\)?([0-9]{3})?(,)?([0-9]{0,3})(-|)?(\|) 

это работает отлично, за исключением того, когда 2 номера continus, для пример:

| 9 450,000 |**9 809 100,000** | 1 890,000 |UN | 

Как исправить это?

+0

Какой язык вы используете? Можете ли вы обработать выходные данные регулярного выражения? – vggonz

ответ

0

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

(?<=\d)(?: |\.)(?=\d) 

А потом заменить матчи пустой строки может быть достаточно.
Однако, если вы не можете их использовать, вы все еще можете использовать

(\d)(?: |\.)(\d) 

А затем используйте ссылки группы ($1$2 или \1\2 в зависимости от вкуса).

Edit:
Чтобы убедиться, что не заменить даты:

(?<=\d)(?: |\.)(?=\d)(?=[ .\d]*,) 

Как вы используете файл CSV, данные разделены | так, что может работать (я не все ваши данные, я не уверен).

+0

Сначала спасибо за ваш ответ, однако я не могу использовать ваш код, поскольку этот конвертер будет преобразовывать Dateformat (например: 11.12.2012 в число) –

+0

Вы в значительной степени ** должны ** использовать общее выражение, если вы не используете хотите иметь слишком длинное регулярное выражение для соответствия числам выше и выше. Я добавляю что-то еще, чтобы проверить, есть ли запятая в номере (что бы не заменить даты). – Loamhoof

+0

Спасибо, в конце я буду форматировать Date с '-', и это решит проблему. –

Смежные вопросы