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