首页 > 解决方案 > 正则表达式提取英国货币,包括英镑符号和便士 (p)

问题描述

我对 RegEx 相当陌生,并且在网上进行了搜索,但找不到符合我要求的正则表达式。

最终目标是搜索一串文本并提取最低金额,但是由于字符串可能包含超过一个£金额,那么我很高兴正则表达式只提取它可以找到的所有货币值然后我可以编写一个计算以返回最低金额。

该字符串可能包含不是货币值/大量金额的数字,因此正则表达式应始终首先查找 £ 符号,或者它可以以“p”或“P”结尾来表示便士。例如“我需要 2 个,每个 10 英镑,一个 50 便士” - 应该返回 10.00 和 0.50 - 然后我可以计算出 0.50 是最低金额。

由于人们也以各种方式写出他们的金额,我需要正则表达式能够发现不同的模式 - 包括每千人的“,”。以下所有值均应有效:

£0
£0.00
£0.00p
£0000
£0000.00
£0000.00p
£0,000
£0,000.00
£0,000.00p
0p

希望有人可以建议解决此问题的最佳方法。

谢谢

标签: regexcurrency

解决方案


这适用于您的数据集:

(?=^£|.*p$)£?\d*(?:,\d{3})*(\.\d{2})?p?

但它也可能与某些边缘情况不匹配,因为一切都是可选的......

https://regex101.com/r/WptUn6/3


推荐阅读