如何用正则表达式将任意长度千分位数字中的点替换为XYZ
实现思路
核心逻辑不需要提前固定分组,利用re.sub支持传入回调函数的特性,分两步完成即可:
- 先精准匹配所有符合千分位规则的数字串,自动过滤掉
100.00这类非千分位的带点数字 - 对每一个匹配到的千分位数字单独处理,直接替换内部的
.为XYZ即可
千分位数字匹配规则
匹配规则的正则表达式为:r'\b\d{1,3}(?:\.\d{3})+\b',规则说明:
\b单词边界,避免匹配到夹杂在其他字符中的不完整数字\d{1,3}匹配开头1~3位数字,符合千分位的开头规则(?:\.\d{3})+非捕获分组,匹配1次及以上「点+3位数字」的组合,天然过滤点后位数不等于3的非千分位场景
代码实现
import re def replace_thousand_dot(text): # 千分位数字匹配正则 thousand_pattern = r'\b\d{1,3}(?:\.\d{3})+\b' # 替换回调:对匹配到的数字单独替换点为XYZ def replace_dot(match_obj): return match_obj.group().replace('.', 'XYZ') return re.sub(thousand_pattern, replace_dot, text) # 测试示例 test_str = "The dog has 12.345 bones, valid nums: 1、456、1.000、34.234.233, invalid num: 100.00" print(replace_thousand_dot(test_str))
输出结果
The dog has 12XYZ345 bones, valid nums: 1、456、1XYZ000、34XYZ234XYZ233, invalid num: 100.00
内容的提问来源于stack exchange,提问作者Marcel Braasch
相关产品推荐
相关产品推荐

