PCRE 正则表达式匹配带格式货币的空格
PCRE Regex matching spaces in formatted currency
对于一个项目,我需要用
替换 space,当且仅当它们以预定义的货币格式出现时。
例如:
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
所以基本上 [CurrencyPrefix][space][金额[with_spaces]][后缀]
这是我到目前为止的想法:
(?:EUR|USD|GBP)(\ )(?:(?:(?:\d+(\ ))+\d+)|\d+\.\d+|\d+)+(?:(\ )(?:Mio\.|million|billion))?
参见:https://regex101.com/r/z73ISR/5
问题是:它只匹配 space 3 次。我需要匹配它 [n] 次(参见 GBP 示例)。
要匹配从货币缩写开始的所有空格到数字之间和之后的所有空格,您需要使用 \G
元字符:
(?:EUR|USD|GBP|\G(?!^)\d+(?:\.\d+)?)\K +
这是解释:
(?:
非捕获组开始
EUR|USD|GBP
匹配其中一个货币名称
|
或
\G(?!^)
从之前结束的地方开始比赛
\d+(?:\.\d+)?
匹配可选小数部分后的数字序列
)
非捕获结束
\K +
重置匹配输出并立即查找空格
对于一个项目,我需要用
替换 space,当且仅当它们以预定义的货币格式出现时。
例如:
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
所以基本上 [CurrencyPrefix][space][金额[with_spaces]][后缀]
这是我到目前为止的想法:
(?:EUR|USD|GBP)(\ )(?:(?:(?:\d+(\ ))+\d+)|\d+\.\d+|\d+)+(?:(\ )(?:Mio\.|million|billion))?
参见:https://regex101.com/r/z73ISR/5
问题是:它只匹配 space 3 次。我需要匹配它 [n] 次(参见 GBP 示例)。
要匹配从货币缩写开始的所有空格到数字之间和之后的所有空格,您需要使用 \G
元字符:
(?:EUR|USD|GBP|\G(?!^)\d+(?:\.\d+)?)\K +
这是解释:
(?:
非捕获组开始EUR|USD|GBP
匹配其中一个货币名称|
或\G(?!^)
从之前结束的地方开始比赛\d+(?:\.\d+)?
匹配可选小数部分后的数字序列
)
非捕获结束\K +
重置匹配输出并立即查找空格