Определение финансового номера с помощью регулярного выражения - PullRequest
0 голосов
/ 28 октября 2019

Ниже приведены действительные числа для различных финансовых дисплеев в зависимости от региона и т. Д.:

1,000
1000.00
1,000,000.00
2.000.000,00
123748 # without commas
4 294 967 295,000
0.24
.24
24
24.

Что было бы лучшим подходом для нахождения регулярного выражения для вышеупомянутого, используя одно большое регулярное выражение или несколько регулярных выражений длякаждый шаблон? Например, отдельный шаблон выглядит так:

no_thousands_separator = '\d+[.,]?\d{0,3}?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Скорее всего, вы хотите создать какое-то выражение, не совсем точно, но, возможно, похожее на

^\.?(?:(?:\d{1,3}[,. ])*\d{1,3}(?:\.\d{2})?|\d+\.\d+|\d+)\.?$

Один из способов разработки, который заключается в том, чтобы искать ваш самый сложный шаблон, написать выражение, изменить, затем продолжитьк вашему простейшему образцу.

Демонстрация

Я только что добавил два \.? в начале и конце выражения, но это не совсем правильно, вы будете включать их вездеты хочешь


Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

Это выражение не проверяет правильность, а только пропускает эти числа .

0 голосов
/ 29 октября 2019

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

\d*(?:([., ])(?:\d{3}\1)*\d{3})?(?:[.,]\d*)?

Проверка на regex101.com

Как это работает?

\d*          Where numbers can occur
([., ])?     Capture the thousands separator
\d{3}        Match 3 digits between separators
\1           Recall thousands separator
(?:[.,]\d*)? Optionally capures decimal part (no thousands separator allowed here)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...