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

如何用Python re模块提取首尾相同字符包裹的子串并去除首尾标识

解决方法

有几种简单的方式可以实现你想要的效果:

方法1:使用正则捕获组

修改正则表达式,用括号把中间需要提取的部分包裹起来,re.findall会自动返回捕获组的内容:

import re
text = "/image/123.__W500__.png"
print(re.findall('__(.*?)__', text))
# 输出: ['W500']

这里(.*?)是非贪婪捕获组,只会匹配__之间的内容,不会超出边界。

方法2:使用正向前后查找断言

利用正则的零宽断言,只匹配__之间的内容,不需要捕获组:

import re
text = "/image/123.__W500__.png"
print(re.findall('(?<=__).*?(?=__)', text))
# 输出: ['W500']
  • (?<=__)是正向后行断言,确保前面是__
  • (?=__)是正向前行断言,确保后面是__
  • 这种方式匹配的内容本身不包含首尾的__

方法3:对结果进行后处理

如果不想修改正则,也可以直接对匹配到的结果做字符串处理:

方式A:用strip去除首尾下划线

import re
text = "/image/123.__W500__.png"
matches = re.findall('__.*?__', text)
result = [item.strip('_') for item in matches]
print(result)
# 输出: ['W500']

方式B:用切片截取中间部分

因为首尾的__长度固定是2,直接切片取[2:-2]:

import re
text = "/image/123.__W500__.png"
matches = re.findall('__.*?__', text)
result = [item[2:-2] for item in matches]
print(result)
# 输出: ['W500']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:16:13