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

如何在Python中匹配DataFrame指定短语并输出其后续单词?

需求与解决方案

需求

给定短语列表:

pre = ["unable to", "would not", "was not", "did not", "there is not", "could not", "failed to"]

需要在DataFrame的文本列中查找包含上述短语的内容,生成新列,输出该短语加上后续的一个单词。例如,当单元格文本为WOULD NOT PRIME CORRECTLY DURING VIRECTOMY.时,新列需输出WOULD NOT PRIME。

原代码问题

你尝试的代码存在逻辑错误:

def matcher(Event_Description):
    for i in pre:
        if i in Event_Description:
            return i + 1
    return "Not found"
  • i + 1是字符串与数字相加,会直接触发报错
  • 未实现"提取后续单词"的核心逻辑
  • 没有处理大小写不匹配的问题(示例文本为大写,列表短语为小写)

正确实现方法

使用正则表达式匹配短语及后续单词,同时兼容大小写差异:

import re
import pandas as pd

# 定义目标短语列表
pre = ["unable to", "would not", "was not", "did not", "there is not", "could not", "failed to"]

# 构建正则模式:匹配任意短语+后续一个单词,忽略大小写
# re.escape避免短语中的特殊字符干扰正则匹配
pattern = re.compile(r'(' + '|'.join(re.escape(p) for p in pre) + r')\s+\w+', re.IGNORECASE)

def matcher(text):
    match_result = pattern.search(text)
    if match_result:
        # 返回匹配到的完整内容(短语+后续单词)
        return match_result.group(0)
    return "Not found"

# 示例DataFrame
df = pd.DataFrame({
    'Event_Description': [
        "WOULD NOT PRIME CORRECTLY DURING VIRECTOMY.",
        "PATIENT WAS NOT RESPONDING TO TREATMENT.",
        "NO ISSUES DETECTED."
    ]
})

# 生成新列
df['Extracted_Phrase'] = df['Event_Description'].apply(matcher)

print(df)

代码说明

  1. 正则模式:用|连接所有短语,re.escape处理短语中的特殊字符,\s+\w+匹配短语后的一个单词(空格+字母/数字组合)
  2. 大小写兼容:re.IGNORECASE参数确保大写文本也能匹配小写短语
  3. 匹配逻辑:re.search查找文本中第一个符合模式的内容,找到则返回匹配结果,否则返回"Not found"

输出结果

Event_Description       Extracted_Phrase
0  WOULD NOT PRIME CORRECTLY DURING VIRECTOMY.       WOULD NOT PRIME
1        PATIENT WAS NOT RESPONDING TO TREATMENT.         WAS NOT RESPONDING
2                          NO ISSUES DETECTED.             Not found

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:45:39