如何构建正则表达式来识别美元 ($) 金额
How to construct regex to identify dollar ($) money sum
我正在尝试创建一个可以识别金额(以美元为单位)的正则表达式。
问题是数据是由OCR在扫描的PDF文件上生成的,所以数据不精确:
$
可以表示为S
.
可以表示为,
1
可以表示为l
或I
5
可以表示为S
示例:
Data: What is should be:
S0.01 => [=10=].01
S1 =>
S400.05 => 0.05
[=10=],01 => [=10=].01
S0,SI => [=10=].51
问题:是否可以构造一个正则表达式来搜索如此复杂的模式?
没那么复杂。从一个可以匹配 "pristine" 输出的正则表达式开始,比如
$[0-9]+(\.[0-9]{2})?
现在,只需将有问题的字符替换为其他字符即可。
[$S][0-9SIl]+([.,][0-9SIl]{2})?
这可能会给您带来误报,因为您会 "find" </code> 在像 "I read SI for baseball and basketball news" 这样的句子中(SI 是杂志 <i>体育画报</i>,但单独使用正则表达式是不可避免的。</p>
<p>匹配完成后,<em>将结果</em>转换为假定的正确形式很简单:将任何初始 <code>S
替换为 $
,任何,
与 .
,以及任何其他 S
与 5
。
我正在尝试创建一个可以识别金额(以美元为单位)的正则表达式。 问题是数据是由OCR在扫描的PDF文件上生成的,所以数据不精确:
$
可以表示为S
.
可以表示为,
1
可以表示为l
或I
5
可以表示为S
示例:
Data: What is should be:
S0.01 => [=10=].01
S1 =>
S400.05 => 0.05
[=10=],01 => [=10=].01
S0,SI => [=10=].51
问题:是否可以构造一个正则表达式来搜索如此复杂的模式?
没那么复杂。从一个可以匹配 "pristine" 输出的正则表达式开始,比如
$[0-9]+(\.[0-9]{2})?
现在,只需将有问题的字符替换为其他字符即可。
[$S][0-9SIl]+([.,][0-9SIl]{2})?
这可能会给您带来误报,因为您会 "find" </code> 在像 "I read SI for baseball and basketball news" 这样的句子中(SI 是杂志 <i>体育画报</i>,但单独使用正则表达式是不可避免的。</p>
<p>匹配完成后,<em>将结果</em>转换为假定的正确形式很简单:将任何初始 <code>S
替换为 $
,任何,
与 .
,以及任何其他 S
与 5
。