如何使用正则表达式仅匹配正好6位的数字完成字符串拆分?
仅拆分正好6位数字的正则实现
错误原因
- 原有正则
r'(\d{6}?)'未限制匹配的6位数字前后的字符类型,只要出现连续6个数字就会触发匹配,因此7位数字的前6位会被单独拆分出来 - 正则中加在
\d{6}后的?没有实际作用,固定次数匹配的规则不受非贪婪标识影响
解决方法
使用零宽断言限制匹配的6位数字前后不能为数字,确保仅匹配恰好连续6位的数字,修改后的正则为r'((?<!\d)\d{6}(?!\d))':
(?<!\d):负向后行断言,要求匹配位置的前一个字符不是数字\d{6}:精确匹配6个连续数字(?!\d):负向前行断言,要求匹配位置的后一个字符不是数字- 外层括号为捕获组,用于让
re.split将匹配到的6位数字保留在拆分结果中
完整代码
import re txt = 'Hello.this.is232323dsSDdsadasd3434343' split_result = re.split(r'((?<!\d)\d{6}(?!\d))', txt) print(split_result)
输出结果
['Hello.this.is', '232323', 'dsSDdsadasd3434343']
内容的提问来源于stack exchange,提问作者Aashish Pal
相关产品推荐
相关产品推荐

