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

如何用正则表达式及sub()提取含'well'句子的左右各两个搭配词

实现思路与代码示例

嘿,这个需求用正则配合Python的re.sub()完全能轻松实现,我来给你一步步拆解具体怎么做!

1. 正则表达式设计

我们需要精准定位每个well及其前后最多两个单词,对应的正则表达式可以这么写:

(?:(\w+)\s+)?(?:(\w+)\s+)?(well)(?:\s+(\w+))?(?:\s+(\w+))?

各部分的作用:

  • (?:(\w+)\s+)?:非捕获组,可选匹配well的倒数第二个前置词(捕获到组1),后面跟空格
  • 第二个(?:(\w+)\s+)?:可选匹配well的紧邻前置词(捕获到组2)
  • (well):捕获目标词well(组3)
  • (?:\s+(\w+))?:可选匹配well的紧邻后置词(捕获到组4)
  • (?:\s+(\w+))?:可选匹配well的倒数第二个后置词(捕获到组5)

2. 用re.sub()收集结果

我们可以借助re.sub()的回调函数,遍历每个匹配到的well,把前后邻词整理成你需要的列表:

import re

def extract_well_context(sentence):
    left_contexts = []
    right_contexts = []
    # 正则模式,可根据文本实际情况调整单词匹配规则
    pattern = r'(?:(\w+)\s+)?(?:(\w+)\s+)?(well)(?:\s+(\w+))?(?:\s+(\w+))?'
    
    def process_match(match):
        # 处理左侧邻词:没有对应词就用"NA"填充,顺序是「倒数第二个前置词、紧邻前置词」
        left_contexts.extend([match.group(1) or 'NA', match.group(2) or 'NA'])
        # 处理右侧邻词:顺序是「紧邻后置词、倒数第二个后置词」
        right_contexts.extend([match.group(4) or 'NA', match.group(5) or 'NA'])
        # 返回原匹配内容,不修改原句子
        return match.group(0)
    
    # 遍历所有匹配的well,执行回调处理
    re.sub(pattern, process_match, sentence)
    return left_contexts, right_contexts

# 测试你的示例句子
test_sentence = "very well they all three get on well together"
left_result, right_result = extract_well_context(test_sentence)
print("左侧结果:", left_result)  # 输出: ['NA', 'very', 'get', 'on']
print("右侧结果:", right_result) # 输出: ['they', 'all', 'together', 'NA']

3. 灵活调整说明

如果你的文本里包含带标点或撇号的单词(比如well,、don't well),可以把正则里的\w+改成[\w',]+,适配更复杂的单词格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:25:23