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

如何使用Python正则表达式提取两个子串之间的特定字符串?

正则匹配问题:提取review:与...之间的内容

嘿,我来帮你搞定这个正则匹配的坑!首先先明确你的需求和遇到的问题:

我需要提取"review: "与"..."之间的字符串,输入内容是:
review: I love you very much... reviewer:jackson review: I hate you very much... reviewer:madden review: sky is pink and i ... reviewer: tom
预期提取结果为:I love you very much、I hate you very much、sky is pink and i
我尝试使用正则表达式re.findall("review(.*)...",string)但匹配失败,得到的结果包含了大量多余内容。

为什么你的正则会失效?

你用的(.*)是贪婪匹配——它会尽可能匹配最长的内容,所以从第一个review开始,会一直匹配到最后一个...之前的所有字符,自然就把中间的其他无关内容也包含进去了,这显然不是你想要的。

正确的解决方案

我们需要用非贪婪匹配来限制匹配范围,同时精准定位开头的review: 和结尾的...。试试这个正则表达式:

import re

target_string = "review: I love you very much... reviewer:jackson review: I hate you very much... reviewer:madden review: sky is pink and i ... reviewer: tom"
# 使用非贪婪匹配的正则
matches = re.findall(r'review: (.*?)\.\.\.', target_string)
print(matches)

运行这段代码,你会得到:

['I love you very much', 'I hate you very much', 'sky is pink and i ']

优化小技巧

注意最后一个结果末尾有个空格(因为原文本里是sky is pink and i ...),如果想去掉多余的空格,可以在提取后用strip()处理结果:

clean_matches = [match.strip() for match in matches]
print(clean_matches)
# 输出: ['I love you very much', 'I hate you very much', 'sky is pink and i']

正则细节解释

  • review: :精准匹配开头的标识,确保我们从正确的位置开始提取
  • (.*?):非贪婪匹配模式,匹配到第一个...就停止,不会过度匹配后续内容
  • \.\.\.:转义后的三个点,因为.在正则中是匹配任意字符的特殊符号,必须转义才能匹配实际的英文句号

内容的提问来源于stack exchange,提问作者Super-ilad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:42:55