Pandas用正则提取文本首组定位值生成多列匹配错误如何解决
解决方案
错误原因
现有正则未限制匹配范围为首个下划线分隔块,会扫描全文匹配到后续块内的内容,导致第三个字段提取错误。
修改代码
推荐使用一次性提取3个分组的写法,逻辑更统一、效率更高:
import pandas as pd # 匹配规则限定在首次出现的连续下划线之前,最多提取3个定位值 loc_pattern = r"Localisation\s*:([^\n]+)\n?([^\n_]*)\n?([^\n_]*)(?=\n_+)" df[["Auto localisation 1", "Auto localisation 2", "Auto localisation 3"]] = df["Description"].str.extract(loc_pattern) # 按你的示例预期,第二行内容为「PRINCIPAL GAUCHE」需取最后一个词的话,追加以下处理 df["Auto localisation 2"] = df["Auto localisation 2"].str.strip().str.split().str[-1].fillna("")
规则说明
(?=\n_+)正向前瞻:强制所有匹配内容必须出现在第一次出现的连续下划线分隔符之前,不会匹配后续块的内容- 三个分组依次对应Localisation冒号后第一行、第二行、第三行的内容,没有对应内容时自动返回空值
- 额外加的字符串处理逻辑适配你示例中第二行取最后一个空格后值的需求,如果不需要直接删除即可。
内容的提问来源于stack exchange,提问作者grinim
相关产品推荐
相关产品推荐

