Python使用re.search匹配起止字符串中间内容且不包含起止标记
import re start = 'melons' end = 'strawberry' s = 'banana apples melons+cucumber+strawberry grapes' # 构建正则规则 r = re.search(re.escape(start) + r'(.*?)' + re.escape(end), s) print(r.group(1)) # 输出:+cucumber+
规则说明
re.escape():用来处理start和end变量,避免起止字符串中包含.、*这类正则特殊字符时出现匹配异常- 核心捕获逻辑
(.*?):- 括号代表正则捕获分组,分组序号从1开始,对应后续调用的
group(1) .*?为非贪婪匹配,会尽可能短的匹配字符,保证命中第一个出现的end就停止,避免文本中存在多个end时匹配范围超出预期
- 括号代表正则捕获分组,分组序号从1开始,对应后续调用的
- 如果需要匹配跨行内容,可以添加
re.DOTALL参数,让.可以识别换行符:r = re.search(re.escape(start) + r'(.*?)' + re.escape(end), s, re.DOTALL)
注意事项
如果无法确认目标字符串中一定存在对应的start和end,建议先判断匹配结果是否为空,避免抛出属性错误:
if r: print(r.group(1)) else: print("未匹配到符合要求的内容")
内容的提问来源于stack exchange,提问作者I Smokh I
相关产品推荐
相关产品推荐

