如何用正则表达式(regex)提取指定词组前后各两个单词,现有代码错在哪?
错误原因
- 没有匹配单词之间的空白字符:你的正则表达式里前后的
(\w+){2}和目标词组之间没有加空白匹配规则,单词之间的空格完全没有被匹配,整个正则自然找不到对应内容。 - 分组捕获逻辑错误:
(\w+){2}的写法会让分组每次匹配都覆盖上一次的结果,最终只能拿到紧邻目标词组的1个单词,拿不到前面/后面的第二个单词。 - 你预期的后置内容
I bought存在拼写错误,原句目标词组后第一个单词是小写的i,实际可提取到的是i bought。
修正后的代码
import re sentence = "I love the grand mother bag i bought . I love my sister's ring " # (?:\w+\s+){2} 表示非捕获组匹配两次「单词+空白」,外层分组捕获整段前置内容 # 后置同理匹配两次「空白+单词」 regex = re.search(r'((?:\w+\s+){2})the grand mother bag((?:\s+\w+){2})', sentence) if regex: # 去掉前后多余空白得到结果 pre_content = regex.group(1).strip() post_content = regex.group(2).strip() print(pre_content, post_content)
运行后输出:I love i bought
内容的提问来源于stack exchange,提问作者lookers
相关产品推荐
相关产品推荐

