如何构建正则表达式来识别美元($)货币总和



我正在尝试创建一个可以识别金额(以美元为单位(的正则表达式。 问题是数据是由OCR在扫描的PDF文件上生成的,因此数据不精确:

  • $可以用S表示
  • .可以用,表示
  • 1可以用lI表示
  • 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

问题:是否有可能构建一个可以搜索如此复杂模式的正则表达式?

没那么复杂。从可以匹配"原始"输出的正则表达式开始,例如

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

现在,只需将有问题的字符替换为它们的替代品即可。

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

这可能会给你带来误报,因为你会在像"我阅读 SI 以获取棒球和篮球新闻"这样的句子中"找到"$1(SI 是《体育画报》杂志的缩写,但这仅通过正则表达式是不可避免的。

一旦你完成了匹配,将结果转换为其假定的正确形式很简单:将任何初始S替换为$,将任何,替换为.,并将任何其他S替换为5

最新更新