2013-11-08 1 views
-1

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

14.978.00 -> 14,978.00 

14.97800 -> 14,978.00 

14,97800 -> 14,978.00 

Логика заключается в следующем:

  1. Если число хорошо сформирован (запятые в правильном месте и не более одной десятичной точки найдено с 2 цифрами после него) - тогда ничего не делать.

  2. Иначе, если десятичная точка находится в положении, в котором запятая будет иметь смысл, а затем изменить десятичную точку на запятую (изменение десятичной запятую, если десятичные имеют 3 или более чисел справа от него)

  3. После выполнения шага 2 Любое число, которое заканчивается запятой, за которой следует 5 цифр (,nnnnn), должно быть преобразовано в ,nnn.nn.

ответ

0

s/\.(\d{3})/,$1/
матч точка следуют 3 цифры, заменить, что запятая следует той же 3 цифры (которые были захвачены).

s/,(\d{3})(\d{2})$/,$1.$2/
матч запятой, а затем 5 цифр (группы 3 и группы 2) в конце строки, заменить, что запятой, первые 3 цифры (которые были захвачены), A и две последние цифры (которые были сняты).

+0

Я положил^([0-9] {2,3}) \. ([0-9] {3}) \. ([0-9] {2}) $ |^([0- 9] {2,3}) \, ([0-9] {3}) ([0-9] {2}) $ |.^([0-9] {2,3}) \ ([0 -9] {3}) ([0-9] {2}) $ в регулярном выражении и $ 1 \, $ 2 \. $ 3 взамен, но он просто отображается. в выводе, он не подбирает целочисленные значения –

+0

Это означало бы, что это совпадение, но не захват, что странно. Однако это не то, что я предложил всем. – SQB