以格式化货币表示的 PCRE 正则表达式匹配空格



对于一个项目,我需要用 替换空格,当 - 并且仅当 - 它们出现在预定义的货币格式中。

例如:

EUR 1.2
EUR 1.23
EUR 12
EUR 123
EUR 12 Mio.
EUR 12 345 Mio.
GBP 1 123 456 789 Mio. <---- this one is a problem, only matching the first, second to last and last one, but not those inbetween
USD 12 million
EUR 1.23 billion

所以基本上[货币前缀][空格][金额[with_spaces]][后缀]

这是我到目前为止想出的:

(?:EUR|USD|GBP)( )(?:(?:(?:d+( ))+d+)|d+.d+|d+)+(?:( )(?:Mio.|million|billion))?

请参阅:https://regex101.com/r/z73ISR/5

问题是:它只匹配空间 3 次。我需要匹配它 [n] 次(请参阅英镑示例(。

要将从货币缩写开始的所有空格与数字之间和数字之后的所有空格匹配,您需要使用G元字符:

(?:EUR|USD|GBP|G(?!^)d+(?:.d+)?)K +

在此处观看现场演示

这是解释:

  • (?:非捕获组的开始
    • EUR|USD|GBP匹配货币名称之一
    • |
    • G(?!^)从之前结束的地方开始比赛
    • d+(?:.d+)?匹配可选小数部分后面的数字序列
  • )非捕获结束
  • K +重置匹配输出并立即查找空格

最新更新