如何使用Python根据指定前三位前缀提取文本中的10位数字
Python实现提取特定前缀的10位数字
实现思路
- 方案1:正则表达式直接匹配,适合前缀长度统一的场景,执行效率更高
- 方案2:先提取所有10位数字再过滤,适合前缀长度不统一的场景,兼容性更强
完整代码示例
方案1:正则直接匹配(示例场景适用)
import re a_string = "Some text 6401104219 and 6401104202 and 2201104202" matches = ["240", "880", "898", "910", "920", "960", "209", "309", "409", "471", "640"] # 构造正则模式:匹配以指定前缀开头、总长度10位的独立数字 pattern = r'\b(?:{})\d{{7}}\b'.format('|'.join(matches)) result = re.findall(pattern, a_string) # 输出格式化为逗号分隔的字符串 print(', '.join(result))
代码说明:\b是单词边界,确保匹配的数字前后没有其他字母/数字;(?:{})是非捕获分组,拼接所有前缀;\d{7}匹配前缀后面的7位数字,加起来刚好10位。如果文本包含中文等非ASCII字符,可以把\b替换为(?<!\d)和(?!\d),用数字负向断言保证匹配结果的独立性。
运行输出:6401104219, 6401104202
方案2:先提取再过滤(兼容性更强)
import re a_string = "Some text 6401104219 and 6401104202 and 2201104202" matches = ["240", "880", "898", "910", "920", "960", "209", "309", "409", "471", "640"] # 先提取所有10位的独立数字 all_10_digits = re.findall(r'\b\d{10}\b', a_string) # 过滤出前缀在matches中的数字 result = [num for num in all_10_digits if any(num.startswith(prefix) for prefix in matches)] print(', '.join(result))
代码说明:这种写法不需要关心前缀的长度,哪怕matches里的前缀存在2位、4位等不同长度的情况也能正常匹配,可扩展性更强。
内容的提问来源于stack exchange,提问作者Patrik Novotný
相关产品推荐
相关产品推荐

