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

Python正则表达式拆分字母数字字符串为两列问题求助

问题原因分析及修正方案

原正则失效的核心原因

你用的正则(?P\D*)(?P\d+)有两个关键问题:

  • 捕获组命名语法错误:正则的命名捕获组格式应该是(?P<组名>匹配规则),你写的(?P\D*)缺少了组名的尖括号(比如应该写成(?P<Letters>\D*)),这会导致正则引擎无法正确识别命名组,甚至可能引发语法错误。
  • 匹配顺序完全反了:你的数据都是「数字在前,非数字在后」,但原正则先尝试匹配\D*(任意数量的非数字字符)——而数字开头的字符串里,开头没有非数字,所以\D*只能匹配到空字符串;接着\d+匹配后面的数字,自然就捕获不到末尾的字母部分了。

符合需求的修正方案

结合你要求的「数字最长4位,非数字最长2位」,正确的正则应该先匹配1-4位数字,再匹配1-2位非数字,同时用命名组区分:

import pandas as pd

Amount = pd.DataFrame({'Size':['200g', '20L', '2L', '1000L','3kg']})
result = Amount['Size'].str.extract(r'(?P<Numbers>\d{1,4})(?P<Letters>\D{1,2})')
print(result)

执行后会得到:

Numbers Letters
0     200       g
1      20       L
2       2       L
3    1000       L
4       3      kg

补充说明

  • \d{1,4}:严格匹配1到4位数字,符合你「数字最长4位」的要求
  • \D{1,2}:严格匹配1到2位非数字字符,符合你「非数字部分最长2位」的要求
  • 因为你的数据都是数字在前,所以正则顺序必须是数字组在前,非数字组在后,才能正确捕获两部分内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:37:03