【问题标题】:Regex match value prefixed/suffixed by currency symbol/code以货币符号/代码为前缀/后缀的正则表达式匹配值
【发布时间】:2014-08-04 15:21:32
【问题描述】:

我需要一个正则表达式来匹配并提取一个以其货币为前缀(或后缀)的十进制值。 下面是一些例子

10$
10.01 $
$ 10.012
61 USD
£ 50.51
94 GBP

发现这个 \p{Sc} 非常有用,但不足以满足我的需要。

【问题讨论】:

  • 预期的输出是什么?
  • 只需获取价值和货币,例如 10.01 $,输出将为 Value: '10.01' Currency: '$'

标签: regex currency cultureinfo


【解决方案1】:

这个正则表达式应该在 PCRE 正则表达式引擎上工作(因为它使用 branch reset feature):

(?|(\p{Sc}|USD|GBP) *(\d+(?:\.\d+)?)|(\d+(?:\.\d+)?) *(\p{Sc}|USD|GBP))

RegEx Demo

这将为您的输入数据生成以下MATCH 信息:

MATCH 1
1. 10
2. $

MATCH 2
1. 10.01
2. $

MATCH 3
1. $
2. 10.012

MATCH 4
1. 61
2. USD

MATCH 5
1. £
2. 50.51

MATCH 6
1. 94
2. GBP

【讨论】:

  • +1 我认为这是正确的。很高兴了解分支重置功能。
  • 请注意,其他语言使用,,而英语使用.。例如。德语:€ 19,90 19 欧元 90 美分。
【解决方案2】:

怎么样:

((?:\p{Sc}|[A-Z]{3})?\s*\d+(?:\.\d+)?\s*(?:\p{Sc}|[A-Z]{3})?)

【讨论】:

  • 我会假设 OP 需要两个不同的组。一个是价值,另一个是货币
猜你喜欢
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多