如何编写正则表达式模式以匹配字符串结尾或字符串开头的货币符号

Posted

技术标签:

【中文标题】如何编写正则表达式模式以匹配字符串结尾或字符串开头的货币符号【英文标题】:How to write a regex pattern to match string with currency sybol at end OR start of string 【发布时间】:2020-11-25 16:26:44 【问题描述】:

我正在尝试在 Python 中编写一个正则表达式模式,它只匹配带有货币符号/单词的子字符串。

字符串示例:

'50,000 and £200.6m, 50p, 500m euro, 800bn euros, $15bn and $99.99. The year 2006 is 20% larger.' 

预期匹配:

    2.006 亿英镑 50p 5 亿欧元 8000 亿欧元 150 亿美元 99.99 美元

我不想要与匹配货币无关的数字,例如纯数字、百分比或年份。

我的尝试:

(^(£|\$)?)\d+([.,]\d*)?|(\d+([.,]\d*)?(p|(bn|m)|(\seuro(s)))$)

我的比赛:

    50,000

显然,正则表达式根本没有像我预期的那样工作。如果它以货币符号开头或以货币符号结尾,则它应该匹配子字符串。

【问题讨论】:

【参考方案1】:

您可以使用一个模式来匹配欧元符号或美元符号[£$],该值后面可选地跟随p mbn

或将pmbn后面的值和欧元与可选的s匹配

(?:[£$]\d+(?:\.\d+)?(?:[pm]|bn)?|\d+(?:\.\d+)?(?:[pm]|bn)(?: euros?)?)

说明

(?:非捕获组 [£$] 匹配 £$ 的字符类 \d+(?:\.\d+)? 匹配 1+ 位数字和可选的小数部分 (?:[pm]|bn)? 可选匹配 pmbn |或者 \d+(?:\.\d+)? 匹配 1+ 位可选小数部分 (?:[pm]|bn) 匹配 pmbn (?: euros?)? 可选地匹配一个空格和euro 与可选的s )关闭群

Regex demo

【讨论】:

【参考方案2】:

这样就可以了:

(?:£|\$)(?:\d*\.)?\d+(?:m|bn)?|(?:\d*\.)?\d+(?:m|bn)? ?(?:p|euros?)

只需将您希望捕获的货币添加到相应的(?:£|\$)(?:p|euros?) 部分即可。将项目添加到 (?:m|bn) 也是如此

https://regex101.com/r/3K9jmR/1

【讨论】:

以上是关于如何编写正则表达式模式以匹配字符串结尾或字符串开头的货币符号的主要内容,如果未能解决你的问题,请参考以下文章

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

正则匹配开头为''结尾为','应该怎么写?

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式

正则表达式 选中以某些字符开始,某些字符结尾的字符串