Как построить регулярное выражение для определения суммы денег в долларах ($) - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь создать регулярное выражение, которое может определить сумму денег (в долларах). Проблема заключается в том, что данные создаются OCR для отсканированных файлов PDF, поэтому данные не точны:

  • $ может быть представлено S
  • . может быть представлено ,
  • 1 может быть представлен l или I
  • 5 можно представить как S

Примеры:

Data:       What is should be:
S0.01    => $0.01
S1       => $1
S400.05  => $400.05
$0,01    => $0.01
S0,SI    => $0.51

Вопрос: Можно ли построить регулярное выражение, которое может искать такой сложный шаблон?

1 Ответ

0 голосов
/ 07 сентября 2018

Это не так сложно. Начните с регулярного выражения, которое может соответствовать «нетронутому» выводу, что-то вроде

\$[0-9]+(\.[0-9]{2})?

Теперь просто замените сомнительных персонажей их альтернативами.

[$S][0-9SIl]+([.,][0-9SIl]{2})?

Это может дать вам ложные срабатывания, поскольку вы "найдете" $1 в предложении типа "Я читаю SI для новостей о бейсболе и баскетболе" (SI - это сокращение от журнала Sports Illustrated , но это неизбежно только с помощью регулярных выражений.

После того как вы сделали совпадение, преобразовав , результат в его предполагаемую правильную форму прост: замените любой начальный S на $, любой , на . и любой другие S с 5.

...