如何编写单个正则表达式匹配法语文本中的法语格式数字
法语格式数字匹配正则方案
最终正则(满足所有需求)
number_pattern = re.compile(r'\d+(?:[., \u00A0]\d+)*', flags=re.UNICODE)
匹配规则说明
该正则完全符合你的要求:
- 首尾必然为数字,支持单个数字匹配,不会遗漏1位数字的场景
- 所有分隔符(点、逗号、普通空格、不间断空格
\u00A0)只能出现在两个数字之间,不会匹配到末尾的非数字字符 - 自动限制非数字字符不能连续出现,避免错误匹配用
,等分隔的数字列表
匹配效果示例
- 可正常匹配:
7、123,45、1.234.567,89、12\u00A0345、987 654,321 - 不会错误匹配:
12.、12,、1,,2、1 3(两个连续空格)
严格格式版本(可选)
如果后续需要严格遵循法语数字规范(千位分隔符后必须跟3位数字),可使用以下版本:
number_pattern = re.compile(r'\d{1,3}(?:[., \u00A0]\d{3})*(?:,\d+)?', flags=re.UNICODE)
使用示例
你的原有处理流程可以直接复用,无需调整:
import re number_pattern = re.compile(r'\d+(?:[., \u00A0]\d+)*', flags=re.UNICODE) doubled_dollars_plain_text = plain_text.replace('$', '$$') substituted_plain_text = re.sub(number_pattern, '$number', doubled_dollars_plain_text)
内容的提问来源于stack exchange,提问作者mike rodent
相关产品推荐
相关产品推荐

