gpt4 book ai didi

python - 正则表达式捕获字符串的两个部分

转载 作者:行者123 更新时间:2023-11-30 21:58:58 27 4
gpt4 key购买 nike

我正在抓取一些数据。数据点之一是锦标赛奖池。数据中有许多不同的货币。我想从每个值中提取金额和货币,以便我可以使用 Google 将它们转换为基础货币。然而,我已经有一段时间没有使用正则表达式了,所以至少可以说我已经生疏了。数据可能的格式如下:

$534
$22,136.20
3,200,000 Ft HUF
12,500 kr DKK
50,000 kr SEK
$3,800 AUD
$10,000 NZD
€4,500 EUR
¥100,000 CNY
₹7,000,000 INR
R$39,000 BRL

下面是我想出的第一个正则表达式。

[0-9,.]+(.+)[A-Z]{3}

但这显然没有捕获金额和货币,所以我更改了它。

([0-9,.]+).+([A-Z]{3})

但是,这个正则表达式存在一些我无法弄清楚的问题。

  1. ([0-9,.]+)其本身可以很好地捕获仅量。

  2. 当我添加.+时对于该表达式,由于某种原因它停止捕获尾随 40分别在第一个和第二个测试用例中。 为什么?

  3. 然后当我添加([A-Z]{3})时,它似乎适用于所有测试用例,但显然在前两个测试用例中没有选择任何内容。

  4. 所以我把它改成了([A-Z]{0,3}) ,这似乎破坏了一切。

发生了什么事?如何更改表达式才能使其正常工作?

这就是我现在的位置:([0-9,.]+)((?:.+)([A-Z]{3}))?

最佳答案

这应该有效:

([0-9,.]+).*?([A-Z]{3})?$

我做了一些更改:

  • 我将 .+ 更改为 .*?,因为数字后面并不总是有某些内容(如前两种情况)。我在这里使用了惰性匹配,因为否则它会匹配所有内容直到最后。

  • 我使用 ? 将第 2 组设为可选,因为并不总是有货币(前 2 种情况)

  • 我添加了行尾 anchor $ 以使惰性 .*? 匹配某物,而不是什么都没有。

如果您不知道“懒惰”在此上下文中的含义,请参阅 this post .

Demo

关于python - 正则表达式捕获字符串的两个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54731581/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com