如何用正则表达式筛选欧元符号后的小数数字?
解决欧元符号后小数数字的提取问题
你原来的正则表达式只匹配了欧元符号后的整数开头部分,没有覆盖千分位分隔符(.)和小数部分(,xx),所以没法完整提取目标数字。
修正后的正则表达式
使用以下正则可以精准匹配符合格式的欧元金额:
€\s?(\d{1,3}(?:\.\d{3})*,\d{2})
各部分含义:
€\s?:匹配欧元符号,后面可选空格(兼容无空格的情况)\d{1,3}:匹配开头1-3位数字(?:\.\d{3})*:匹配0或多个「点+三位数字」的千分位结构(非捕获组,不单独提取),\d{2}:匹配逗号加两位小数
完整代码示例
import re test_string = """Crownless 14kg 10 Sweet CR Klasse I € 7,00 € 3.962,00 706 Appels Royal Gala 13kg 60/65 Generica PL Klasse I € 4,68 € 3.304,08 598 Peen Waspeen 14x1lkg 200-400 Generica BE Klasse I € 6,30 3.767,40 Order number : 76462 Loading date : 18-11-21 Incoterm: : FOT Your ref. : SCHOOLFRUIT Delivery date""" pattern = re.compile(r'€\s?(\d{1,3}(?:\.\d{3})*,\d{2})') matches = pattern.finditer(test_string) for match in matches: print(match.group(1))
运行结果
7,00 3.962,00 4,68 3.304,08 6,30
注:第三行的3.767,40因前面无欧元符号,不会被提取,符合需求。
内容的提问来源于stack exchange,提问作者mightycode Newton
相关产品推荐
相关产品推荐

