Python 如何编写正则表达式模式以在字符串的末尾或开头将字符串与货币sybol匹配

Python 如何编写正则表达式模式以在字符串的末尾或开头将字符串与货币sybol匹配,python,regex,Python,Regex,我正在尝试用Python编写一个正则表达式模式,它只匹配附加了货币符号/单词的子字符串 字符串示例: 预期匹配项: 2亿060万英镑 50便士 5亿欧元 8000亿欧元 150亿美元 99.99美元 我不想要与匹配无关的数字,例如普通数字、百分比或年份 我的尝试: 我的比赛: 五万 显然,正则表达式一点也不像我预期的那样工作。如果子字符串以货币符号开头或以货币符号结尾,则应与之匹配。您可以使用模式匹配欧元或美元符号[£$],该值可选择后跟pm或bn 或者将后面跟着pm或bn和欧元的值与可选的s匹

我正在尝试用Python编写一个正则表达式模式,它只匹配附加了货币符号/单词的子字符串

字符串示例:

预期匹配项:

  • 2亿060万英镑
  • 50便士
  • 5亿欧元
  • 8000亿欧元
  • 150亿美元
  • 99.99美元
  • 我不想要与匹配无关的数字,例如普通数字、百分比或年份

    我的尝试:

    我的比赛:

  • 五万

  • 显然,正则表达式一点也不像我预期的那样工作。如果子字符串以货币符号开头或以货币符号结尾,则应与之匹配。

    您可以使用模式匹配欧元或美元符号
    [£$]
    ,该值可选择后跟
    p
    m
    bn

    或者将后面跟着
    p
    m
    bn
    和欧元的值与可选的s匹配

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

    • (?:
      非捕获组
      • [£$]
        匹配
        £
        $
      • \d+(?:\。\d+)
        将1+位与可选的小数部分匹配
      • (?:[pm]| bn)?
        可选择匹配
        p
        m
        bn
      • |
      • \d+(?:\。\d+)
        将1+位与可选小数部分匹配
      • (?:[pm]| bn)
        匹配
        p
        m
        bn
      • (?:欧元?
        可选地匹配空格,并将
        欧元
        与可选的
        s
    • 关闭组

    像这样的东西可以做到:

    (?:£|\$)(?:\d*\.)?\d+(?:m|bn)?|(?:\d*\.)?\d+(?:m|bn)? ?(?:p|euros?)
    
    只需继续将您希望捕获的货币添加到相应的
    (?:£\$)
    (?:p |欧元?
    部分。向
    (?:m|bn)

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