如何用Python正则提取AK/BK开头且同时含字母数字的指定格式字符串
Python正则提取规则调整方案
你的原有正则仅限制了可匹配的字符范围,没有增加「后续内容必须同时包含字母和数字」的校验逻辑,因此会出现仅含字母的错误匹配结果。
调整后的正则规则
pattern = r'(?:AK|BK)(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9/-]+'
各部分逻辑说明:
(?:AK|BK):非捕获分组,匹配字符串以AK或BK开头,不会额外占用分组序号影响re.findall的返回结果(?=.*\d):零宽正向预查,要求AK/BK后续的内容中至少包含1个数字(?=.*[a-zA-Z]):零宽正向预查,要求AK/BK后续的内容中至少包含1个字母[a-zA-Z0-9/-]+:匹配允许出现的所有字符(字母、数字、-、/),此处将-放在字符集末尾避免被识别为范围连接符
完整实现代码
import re document_text=""" This is the organization..this is the address. some information AK3418CPMP AKBN BKCPU BK123-XY/9 lot of other information down """ pattern = r'(?:AK|BK)(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9/-]+' res_list = re.findall(pattern, document_text) print(res_list) # 输出结果:['AK3418CPMP', 'BK123-XY/9']
匹配效果验证
- 可正常匹配的合法字符串:
AK3418CPMP、BK123-AB/c - 不会被匹配的非法字符串:
AKBN(无数字)、BK1234(无字母)
内容的提问来源于stack exchange,提问作者TLanni
相关产品推荐
相关产品推荐

