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

Python正则后行与负后行断言困惑及Pandas字符串提取需求

我来帮你搞定这个需求!要从Pandas DataFrame中提取斜杠右侧的rabbit相关术语,同时排除掉右侧字符串里rabbit前面带有jack(不管中间有没有间隔字符)的情况,我们可以结合Pandas的字符串处理工具和正则表达式来实现,下面是具体步骤和代码示例:

解决方案步骤

1. 提取斜杠右侧的字符串内容

首先我们需要把目标列的字符串按/分割,单独取出右侧的部分。可以用Pandas的str.split()方法来快速实现:

import pandas as pd

# 先构造一个测试用的DataFrame(你可以替换成自己的真实数据)
df = pd.DataFrame({
    'target_col': [
        'animal/white rabbit',
        'pet/jack rabbit',
        'wild/jack and rabbit',
        'zoo/rabbit hole',
        'farm/jackrabbit',
        'park/brown rabbit'
    ]
})

# 分割字符串,提取斜杠右侧的内容,存为新列
df['right_side'] = df['target_col'].str.split('/', expand=True)[1]

2. 筛选并提取符合条件的rabbit术语

接下来我们需要筛选出right_side列中包含rabbit,且rabbit前面没有jack(无论是否有间隔)的内容。这里用负向预查正则表达式来精准匹配:

正则表达式:^(?!.*jack.*rabbit).*rabbit.*$

  • ^:匹配字符串的开头
  • (?!.*jack.*rabbit):负向预查,意思是"整个字符串中不存在'任意字符+jack+任意字符+rabbit'的序列"
  • .*rabbit.*:确保字符串中包含rabbit
  • 可以加上case=False参数来忽略大小写(如果你的数据里有大小写混合的情况)

然后用str.contains()来筛选,再用where()提取符合条件的内容:

# 定义匹配规则
pattern = r'^(?!.*jack.*rabbit).*rabbit.*$'

# 提取符合条件的rabbit术语,不符合的设为None
df['valid_rabbit_term'] = df['right_side'].where(df['right_side'].str.contains(pattern, case=False), None)

最终结果

运行上面的代码后,你的DataFrame会变成这样:

target_colright_sidevalid_rabbit_term
animal/white rabbitwhite rabbitwhite rabbit
pet/jack rabbitjack rabbitNone
wild/jack and rabbitjack and rabbitNone
zoo/rabbit holerabbit holerabbit hole
farm/jackrabbitjackrabbitNone
park/brown rabbitbrown rabbitbrown rabbit

如果你的需求是只提取rabbit相关的核心术语(比如只保留"rabbit"或带修饰的部分,而不是整个右侧字符串),可以调整正则为r'(?<!jack.*)\brabbit\b.*',不过根据你的描述,上面的方案应该已经能满足需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:48:29