Python如何调整字符串切片逻辑适配Sku、Id两种起始子串的内容提取需求
Python双标记字符串截取适配方案
方案1:原生字符串方法实现(无需导入依赖)
代码如下:
# 测试用例1:Sku开头 s = 'T1 Test 2 Sku Red Widget at 10.0' # 测试用例2:Id开头,替换即可验证 # s = 'X3 Sample 5 Id Black Device at 49.9' # 分别查找两个起始标记的位置 sku_pos = s.find('Sku ') id_pos = s.find('Id ') # 确定有效起始位置 if sku_pos != -1: start_pos = sku_pos + 4 else: start_pos = id_pos + 3 end_pos = s.find(' at') target = s[start_pos:end_pos] print(target)
适配逻辑:
- 优先判断是否存在
Sku标记,存在的话跳过4个字符(Sku本身长度)作为起始截取位置 - 不存在
Sku标记时默认命中Id标记,跳过3个字符(Id本身长度)作为起始截取位置 - 终止截取逻辑保持原有规则不变,以
at的位置作为截取终点
方案2:正则表达式实现(扩展性更强)
如果后续可能新增其他起始标记,用正则的方式修改成本更低:
import re s = 'X3 Sample 5 Id Black Device at 49.9' res = re.search(r'(?:Sku|Id)\s+(.*?)\s+at', s) if res: target = res.group(1) print(target)
正则规则说明:
(?:Sku|Id)匹配Sku或Id两个可选的起始前缀,?:表示不需要单独提取该前缀分组\s+匹配前缀和目标内容之间的空格,兼容可能出现的多个空格场景(.*?)非贪婪匹配目标内容,直到遇到后续的at标记停止匹配
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

