Pandas str.extract提取PIN#字段时含字母数字段匹配不全如何解决
问题根源
原有正则的后续片段匹配规则仅支持纯数字内容(\d+),因此0020A、0D14这类夹带字母的编码段无法被识别,匹配会提前终止,导致内容缺失。
修正方案
观察样本规律:PIN编码的所有分段均为「数字+大写字母」混合或纯数字组成,编码结束的标志是后续出现纯字母的字段标识(如Rmrk、ABC)或到达行尾。基于这个规则调整正则即可:
df['PIN'] = df['description'].str.extract( r'PIN#\s+([A-Z0-9\s]+?)(?=\s+[A-Za-z]+\b|$)' )[0].str.strip()
- 正则核心逻辑:匹配
PIN#后所有由大写字母、数字、空格组成的内容,直到碰到第一个纯字母单词或行尾时停止 - 末尾的
str.strip()用于去除匹配结果首尾可能残留的空格
提取结果
执行代码后得到的输出完全符合预期:
0 DP73770000 0156 312 1 OP55000034 0020A 2 DP34500001 0D14 3 GP20000006 0029 Name: PIN, dtype: object
内容的提问来源于stack exchange,提问作者MHA
相关产品推荐
相关产品推荐

