Python中匹配含$、逗号、小数的数字字符串的正则表达式如何编写?
解决方案
你原来的正则缺失了对可选美元符、合法千分位结构的校验,同时没有做严格的结尾匹配,会匹配到空串、单独符号等无效内容。调整后的正则可以覆盖所有给定示例:
import re pattern = re.compile(r'^\$?[-+]?(?:\d+|\d{1,3}(?:,\d{3})*)(?:\.\d{2})?$') test_cases = [ "1,000", "1,000.00", "$1,000.00", "1000", "-1000" ] for text in test_cases: if pattern.match(text.strip()): print(f"{text}: Matched") else: print(f"{text}: Not Matched")
运行后所有测试用例都会输出Matched。
正则结构说明
^匹配字符串开头,避免前缀匹配\$?匹配0或1个美元符,支持可选的$前缀[-+]?匹配0或1个正负号,支持可选的正负前缀(?:\d+|\d{1,3}(?:,\d{3})*)非捕获组,兼容两种数字格式:\d+无千分位逗号的纯数字\d{1,3}(?:,\d{3})*符合千分位规则的带逗号数字,避免匹配到1,00,0这类无效格式
(?:\.\d{2})?非捕获组,匹配0或1组「小数点+2位小数」的结构,支持可选的小数位,如果你需要支持任意位小数,把\d{2}改为\d+即可$匹配字符串结尾,避免后缀匹配到无效内容
内容的提问来源于stack exchange,提问作者user13074756
相关产品推荐
相关产品推荐

