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

如何用Python或Regex实现didn't后至标点前词添加NOT_的分词处理

嘿,这个需求用Python正则配合回调函数就能轻松搞定,我给你拆解下思路和具体代码:

实现思路

核心逻辑分两步走:

  1. 精准定位didn't到下一个标点符号之间的文本片段
  2. 对这个片段里的每个单词前缀添加NOT_
具体代码实现
import re

def add_not_prefix(match):
    # 提取匹配到的三个分组:didn't、中间待处理文本、结尾标点
    didnt_part = match.group(1)
    content = match.group(2)
    punctuation = match.group(3)
    
    # 把中间文本里的每个单词替换成NOT_开头的形式
    processed_content = re.sub(r'\b(\w+)\b', r'NOT_\1', content)
    
    # 拼接回完整的片段
    return f"{didnt_part}{processed_content}{punctuation}"

# 测试句子
original_sentence = "I didn't like that SO question, but I like pizza!"
processed_sentence = re.sub(r"(didn't)([^.,!?]+)([.,!?])", add_not_prefix, original_sentence)

print(processed_sentence)
# 输出结果:I didn't NOT_like NOT_that NOT_SO NOT_question, but I like pizza!
代码细节解释
  • 外层正则r"(didn't)([^.,!?]+)([.,!?])":
    • (didn't):精准匹配目标短语,作为第一组保留原内容
    • ([^.,!?]+):匹配除了, . ! ?之外的所有字符,也就是didn't到下一个标点之间的待处理内容,作为第二组
    • ([.,!?]):匹配后续的标点符号,作为第三组保留原内容
  • 回调函数add_not_prefix:
    • 用内层正则r'\b(\w+)\b'匹配第二组里的每个独立单词(\b是单词边界,\w+匹配字母数字组成的单词)
    • 把每个匹配到的单词替换成NOT_\1(\1指代匹配到的原单词内容)
  • 适配扩展:如果需要支持更多标点(比如分号、冒号),只需要修改正则里的标点集合,比如改成[^.,!?;:]+和[.,!?;:]即可;如果句子里有多个didn't,代码也能自动处理每一处匹配。

内容的提问来源于stack exchange,提问作者ℕʘʘḆḽḘ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:09:46