如何用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
相关产品推荐
相关产品推荐

