【问题标题】: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.' 

预期匹配:

  1. 2.006 亿英镑
  2. 50p
  3. 5 亿欧元
  4. 8000 亿欧元
  5. 150 亿美元
  6. 99.99 美元

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

我的尝试:

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

我的比赛:

  1. 50,000

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

【问题讨论】:

    标签: python regex


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-07
        • 2022-08-03
        • 2015-04-27
        • 1970-01-01
        • 2023-01-02
        • 2011-09-23
        • 2021-01-17
        相关资源
        最近更新 更多