如何从Excel字符串提取前5字符属指定列表、后3为数字的10字符单词?
解决方案
要实现从Excel的Description列提取符合要求的10字符单词,你可以通过构造精准的正则表达式,结合Pandas的批量字符串处理功能来完成,以下是修正后的代码:
import pandas as pd import re # 读取Excel文件 df = pd.read_excel(r'D:/Users/Data.xlsx') # 定义目标前缀列表 prefix_list = ['AQBCN','PUCNQ','DJBNK','ADJBC','NJRQC'] # 构造正则表达式:匹配前5字符为指定前缀、中间2任意字符、最后3数字的10字符内容 prefix_pattern = '|'.join(prefix_list) regex_pattern = fr'({prefix_pattern}).{{2}}\d{{3}}' # 提取匹配内容到Number列,无匹配则留空 df['Number'] = df['Description'].str.extract(regex_pattern, expand=False) # 可选:保存处理后的结果到新Excel # df.to_excel(r'D:/Users/Processed_Data.xlsx', index=False) print(df)
代码说明:
- 正则表达式构造:
prefix_pattern将前缀列表转为AQBCN|PUCNQ|DJBNK|ADJBC|NJRQC,用于匹配前5个符合要求的字符;.{2}匹配中间任意2个字符(保证总长度为10:5+2+3);\d{3}匹配最后3个数字;- 整个表达式用括号包裹,确保
str.extract能提取到完整的目标字符串。
- Pandas批量处理:使用
str.extract直接对整个Description列操作,比循环遍历效率更高,无匹配的行自动填充NaN(显示为空),符合预期输出。
原代码的问题:
- 正则表达式
[ae]\w+完全不符合需求,它只会匹配以a或e开头的单词,和你要提取的10字符目标毫无关系; - 循环遍历每一行但没有将提取结果赋值到
Number列,无法得到预期输出; - 使用
list作为变量名会覆盖内置的list类型,属于不良编码习惯。
内容的提问来源于stack exchange,提问作者Manz
相关产品推荐
相关产品推荐

