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

Python正则提取问题:从字符串列表提取三部分生成DataFrame

修正正则表达式以正确提取三部分内容

你的核心问题是原正则里的[^(abc)]用错了——这个语法是字符集取反,匹配的是任意不是(、a、b、c的单个字符,完全不符合“中间部分不以abc结尾”的需求,导致结尾为a/b/c的中间部分被错误截断。

修正后的正则表达式

使用负向后顾断言来确保中间部分不以abc结尾,同时保留前缀和后缀的可选匹配:

r"^(s_|t_q_)?(\w+)(?<!abc)(abc)?$"

正则逻辑解释

  1. ^:匹配字符串开头,确保从开头开始匹配
  2. (s_|t_q_)?:可选匹配前缀s_或t_q_,匹配不到则返回NaN
  3. (\w+):贪婪匹配中间部分(字母、数字、下划线)
  4. (?<!abc):负向后顾断言,确保中间部分的结尾不是abc,满足“中间部分不能以abc结尾”的要求
  5. (abc)?$:可选匹配结尾的abc,匹配不到则返回NaN,$确保匹配到字符串结尾

完整代码及运行结果

import pandas as pd
import re

str_list = ['s_c45abc','s_ab00_a','t_q_de45abc','t_q_123','t_q_c34b7_da','456a','456abc','456b']

result = pd.Series(str_list).str.extract(r"^(s_|t_q_)?(\w+)(?<!abc)(abc)?$")
print(result)

运行后得到的结果完全符合你的期望:

0           1     2
0     s_         c45   abc
1     s_      ab00_a  NaN
2  t_q_         de45   abc
3  t_q_          123  NaN
4  t_q_    c34b7_da  NaN
5    NaN        456a  NaN
6    NaN         456   abc
7    NaN        456b  NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 13:34:54