我正在尝试创建一个可以识别金额(以美元为单位(的正则表达式。 问题是数据是由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
问题:是否有可能构建一个可以搜索如此复杂模式的正则表达式?
没那么复杂。从可以匹配"原始"输出的正则表达式开始,例如
$[0-9]+(.[0-9]{2})?
现在,只需将有问题的字符替换为它们的替代品即可。
[$S][0-9SIl]+([.,][0-9SIl]{2})?
这可能会给你带来误报,因为你会在像"我阅读 SI 以获取棒球和篮球新闻"这样的句子中"找到"$1
(SI 是《体育画报》杂志的缩写,但这仅通过正则表达式是不可避免的。
一旦你完成了匹配,将结果转换为其假定的正确形式很简单:将任何初始S
替换为$
,将任何,
替换为.
,并将任何其他S
替换为5
。