[英]RegEx to Capture Two Parts of String
我在抓一些数据。 其中一个数据点是锦标赛奖池。 数据中有许多不同的货币。 我想从每个值中提取金额和货币,以便我可以使用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,.]+(.+)[AZ]{3}
但这显然无法捕捉金额和货币,所以我改变了它。
([0-9,.]+).+([AZ]{3})
但是,这个正则表达式存在一些我无法弄清楚的问题。
([0-9,.]+)
本身可以很好地捕获数量。
当我将.+
添加到该表达式时, 由于某种原因,它分别在第一个和第二个测试用例中停止捕获尾随的4
和0
。 为什么?
然后当我添加([AZ]{3})
,它似乎对所有测试用例都很有效,但显然在前两个中没有选择任何东西。
所以我把它改成了([AZ]{0,3})
,这似乎打破了一切。
发生了什么? 如何更改表达式以使其有效?
这就是我所在的地方: ([0-9,.]+)((?:.+)([AZ]{3}))?
对于示例数据,您可以使用可选的非捕获组来匹配空格和货币之前的字符:
([0-9,.]+)(?:(?: [A-Za-z]+)? ([A-Z]{3}))?
这将匹配
(
捕获组
[0-9,.]+
匹配字符类中列出的内容的1倍以上 )
关闭捕获组 (?:
非捕获组
(?: [A-Za-z]+ )?
可选组匹配空格,1-a次a-zA-Z和空格 ([AZ]{3})
捕获3个大写字符 )?
关闭非捕获组并使其可选
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.