【发布时间】:2019-07-22 15:36:40
【问题描述】:
我正在编写一个 Python 正则表达式来从一些聊天消息中提取货币汇率。消息有几种不同的格式,例如:
“... CAD/USD 0.xxx ...”(加元兑美元)
“... CADUSD 0.xxx ...”(加元兑美元)
“... EUR 1.xxx ...”(欧元兑美元)
货币可以是美元、欧元、加元、瑞士法郎、新加坡元等。
我尝试过使用该模式:
r"(.*)\s+(USD|CAD|EUR|CHY|JPY)/?(USD|CAD|EUR|CHY|JPY)?\s+([0-9.]+)\s+(.*)"
但我总是得到第二种货币,例如从 CADUSD 只得到美元。
有人可以告诉我我应该使用什么正确的模式吗?
【问题讨论】:
-
不清楚您要捕获什么,只是第一种货币?只是数字?使用您当前的正则表达式,您将获得货币、金额以及货币部分之前和之后的行部分
-
为什么不使用
[A-Z]{3}作为货币代码?列出所有有效的货币代码几乎是不可能的(也没有必要)... -
@Nullman 我正在尝试获取 2 种货币和汇率。如果只有一种货币,则第二种货币将具有默认值,例如 USD。问题在于那个正则表达式,我只能捕获第二种货币。
-
@trolley813 我不必获得所有货币,只需获得我在模式中使用的一些货币。
-
@vodka 是的,但您很容易忘记包含其中一个,如果您想在某个时间扩展您的货币列表,可能会在 几个 位置更改正则表达式.当然,对于不需要重复运行的一次性脚本也没关系。