【问题标题】:Regex for capturing currency exchange rate用于捕获货币汇率的正则表达式
【发布时间】: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 是的,但您很容易忘记包含其中一个,如果您想在某个时间扩展您的货币列表,可能会在 几个 位置更改正则表达式.当然,对于不需要重复运行的一次性脚本也没关系。

标签: python regex


【解决方案1】:

尝试使用下面的表达式,首先删除不需要的东西,然后将末尾的\s+替换为\w+

>>> re.findall(r"(SD|CAD|EUR|CHY|JPY).*(USD|CAD|EUR|CHY|JPY)\s+\d+.\w+", s)
[('CAD', 'USD')]
>>> 

【讨论】:

  • 也许是对假设答案的解释?你的模式在做什么而他们的不是?他们哪里做错了?
  • @Will 添加了一些
猜你喜欢
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 2012-05-25
  • 2010-10-23
相关资源
最近更新 更多