如何用正则表达式及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
相关产品推荐
相关产品推荐

