You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式分离带后缀数字的国家名称问题排查

问题分析与解决方案

问题原因

你的正则([a-zA-Z]*)(\d*)导致第一分组捕获空值、Country列变空,主要有两个核心原因:

  • [a-zA-Z]*仅匹配大小写字母,若国家名称包含空格、连字符等非字母字符,正则会在这些字符前匹配0次字母,直接导致第一分组为空。
  • *是允许匹配0次的量词,当字符串存在数字开头的情况(哪怕是个别数据),或者正则引擎的匹配优先级优先选择空的字母分组,也会出现第一分组为空的问题。

修正方案

改用更通用的正则匹配逻辑,结合pandas的字符串方法正确提取分组内容:

步骤1:调整正则表达式

用(\D*)(\d*)替代原正则,其中:

  • \D*匹配所有非数字字符,覆盖字母、空格、特殊字符等国家名称常见格式
  • \d*匹配所有数字后缀

步骤2:正确编写处理函数

import pandas as pd

def new_name2(df):
    # 提取非数字前缀和数字后缀两个分组
    extracted = df['Country'].str.extract(r'(\D*)(\d*)')
    # 将清洗后的国家名称赋值回原列,去除可能的冗余空格
    df['Country'] = extracted[0].str.strip()
    # 可选:新增列存储数字后缀,空值替换为pd.NA
    df['Country_Suffix'] = extracted[1].replace('', pd.NA)
    return df

测试示例

# 构造测试数据
test_df = pd.DataFrame({
    'Country': ['France6', 'Germany', 'Japan12', 'South Korea8', 'Brazil']
})
# 执行函数
cleaned_df = new_name2(test_df)
print(cleaned_df)

运行结果:

Country Country_Suffix
0        France              6
1       Germany           <NA>
2         Japan             12
3  South Korea              8
4        Brazil           <NA>

内容的提问来源于stack exchange,提问作者Hugo_DH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:20:23