如何用Python从Excel提取前5符属指定列表后3为数字的12字符字段
从Excel字符串提取符合规则的12字符字段解决方案
需求说明
需要从Excel文件Data.xlsx的Description列中提取满足以下规则的12字符字段:
- 前5个字符必须属于指定列表
list_Character = ['AQBCN','PUCNQ','DJBNK','ADJBC','NJRQC'] - 最后3个字符为数字
输入数据
Description Number CHQ -AQBCN222Q546 from India Federation Pvt Ltd CHQN#DJBNK220Q329 from Indiana Basics Software Ltd -BC003 CASH- NJRQC225J987^ from US Fertilizers LLP CHQ - from India Bulls Pvt Ltd AQBCN222Q989 from India Bulls Pvt Ltd CHQ -AQCCN222Q546 from India Federation Pvt Ltd CASH - AQBCN222Q546289 from India Federation Pvt Ltd
预期输出
Description Number CHQ -AQBCN222Q546 from India Federation Pvt Ltd AQBCN222Q546 CHQN#DJBNK220Q329 from Indiana Basics Software Ltd -BC003 DJBNK220Q329 CASH- NJRQC225J987^ from US Fertilizers LLP NJRQC225J987 CHQ - from India Bulls Pvt Ltd AQBCN222Q989 from India Bulls Pvt Ltd AQBCN222Q989 CHQ -AQCCN222Q546 from India Federation Pvt Ltd CASH - AQBCN222Q546289 from India Federation Pvt Ltd
原代码问题分析
你提供的代码存在以下几个问题:
- 正则依赖
#或-作为前缀,无法匹配直接出现在字符串开头的目标字段(如第5行的AQBCN222Q989) \w{5}仅匹配5个字符,加上前缀的5个字符总共只有10个,不符合12字符的要求- 未对最后3个字符必须是数字做限制,可能提取不符合规则的内容
\b单词边界的判断在特殊符号附近可能失效
正确解决方案
代码实现
import pandas as pd import re df = pd.read_excel(r'D:/Users/Data.xlsx') list_Character = ['AQBCN','PUCNQ','DJBNK','ADJBC','NJRQC'] # 构建正则:匹配指定前缀开头,后跟4个任意单词字符,结尾3个数字的12字符序列 # 前后负向断言确保目标序列是独立的,不会被更长的字符串包含 pattern = re.compile( r'(?<![\w])(' + '|'.join(re.escape(char) for char in list_Character) + r')\w{4}\d{3}(?![\w])' ) df["Number"] = df["Description"].str.extract(pattern, expand=False)
正则解释
(?<![\w]):负向回溯断言,确保目标序列的前一个字符不是单词字符(字母、数字、下划线),避免从更长的字符串中截取部分内容(' + '|'.join(re.escape(char) for char in list_Character) + '):匹配指定列表中的任意一个5字符前缀,re.escape避免特殊字符干扰正则匹配\w{4}:匹配前缀后的4个任意单词字符(对应12字符中的第6-9位)\d{3}:匹配结尾的3个数字(对应12字符中的第10-12位)(?![\w]):负向前瞻断言,确保目标序列的后一个字符不是单词字符,避免匹配更长的连续字符(如最后一行的15字符序列)
验证结果
运行上述代码后,Number列将准确提取所有符合规则的12字符字段,与预期输出完全一致:
- 第1行提取
AQBCN222Q546 - 第2行提取
DJBNK220Q329 - 第3行提取
NJRQC225J987 - 第4行无匹配内容,
Number列为空 - 第5行提取
AQBCN222Q989 - 第6行的
AQCCN不在指定列表中,无匹配内容 - 第7行的序列长度为15,不符合12字符要求,无匹配内容
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

