Python 如何构造正则表达式以识别美元($)金额

Python 如何构造正则表达式以识别美元($)金额,python,regex,dollar-sign,Python,Regex,Dollar Sign,我正在尝试创建一个正则表达式,它可以识别美元金额。 问题在于数据是由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 问题:是否有可能构造一个可以搜索

我正在尝试创建一个正则表达式,它可以识别美元金额。 问题在于数据是由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})?
这可能会给你带来误报,因为你会在一句话中发现$1,比如我为棒球和篮球新闻读SI,SI是《体育画报》杂志的缩写,但单用正则表达式是不可避免的


匹配完成后,将结果转换为假定的正确形式很简单:将任何首字母S替换为$,any,with.,将任何其他S替换为5。

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

\$[0-9]+(\.[0-9]{2})?
现在,用他们的替代品替换有问题的角色

[$S][0-9SIl]+([.,][0-9SIl]{2})?
这可能会给你带来误报,因为你会在一句话中发现$1,比如我为棒球和篮球新闻读SI,SI是《体育画报》杂志的缩写,但单用正则表达式是不可避免的


匹配完成后,将结果转换为假定的正确形式很简单:将任何首字母S替换为$,any,with.,并将任何其他S替换为5。

Regex可用于查找$,但只能在一行的结尾处。请澄清。您想要识别OCR扫描金额的正则表达式,还是想要用适当的数字和字符替换S、I等的代码?匹配和替换是非常不同的事情。两者都很琐碎,但仅使用正则表达式无法避免误报。@wim:您能详细说明一下吗?正则表达式可以用来查找$,但只能在一行的末尾。请澄清。您想要识别OCR扫描金额的正则表达式,还是想要用适当的数字和字符替换S、I等的代码?匹配和替换是非常不同的事情。两者都很琐碎,但仅使用正则表达式无法避免误报。@wim:您能详细说明一下吗?您刚刚忘记了两个字符类中的l[$S][\dIlS]+?:[,][,][\dIlS]+?。我忘记了;我几乎忘记了我在初稿中的表现:你只是忘记了两个角色类中的l[$S][\dIlS]+?:[,[][\dIlS]+;我差点忘了我在初稿中也说过: