Большое количество регулярных выражений для количества и цен в финансах - PullRequest
0 голосов
/ 15 марта 2019

Я выполняю анализ данных на огромном количестве финансовых данных, и мне нужно найти два регулярных выражения Python, которые соответствуют:

Цены, такие как:

16 666 666.67
16 666 666,67
666 666.67
5 567.1
5 677,1
0.0
0,101
5,4
5.40
54.0
5.675674754747457
5980990.009345
16,000.45
234,234,657.108

Естьвсегда кома или точка в цене.Но перед комой могут быть пробелы (пробелы должны быть непротиворечивыми, например, не 56 34.345)

Объем (количество), например:

9898
5
450934
5,000
1,000
1,000,000
5,998
11
0
5 000
1 000 000
1 980 000 000
599
233 590
23 613
181 876 980

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

Вот тот, который я пробовал для цен: (^[0-9]{0,}$)|(\d{1,}(?:[.,]\d{3})*(?:[.,]\d*)) Но я не могу обработать пробелы.

А для объема это очень сложно для меня, так каквезде также пробелы!

Большое спасибо.

1 Ответ

2 голосов
/ 15 марта 2019

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

Во-первых, нормализация каждой строки хороша, так как есть много приемлемых форматов.Мы нормализуем так, чтобы . всегда был десятичным разделителем, а всегда был разделителем тысяч:

if '.' not in line:
    # `,` is our separator, so replace with `.`
    line = line.replace(',', '.')
else:
    # `.` is our separator, so replace `,` with ` ` (does nothing if already space separated).
    line = line.replace(',', ' ')

Теперь мы можем применить регулярное выражение к line:

^\d{1,3}(\s\d{3})*\.\d+$ будет соответствовать чему-либо с разделенными тысячами.^\d+\.\d+$ будет соответствовать чему угодно без разделенных тысяч.

Обратите внимание, что, поскольку мы выполнили небольшую предварительную обработку строк, наше регулярное выражение стало намного проще.Я оставлю номер один (должно быть проще) и получу для вас соответствующие фрагменты.

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

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