如何从指定字符串提取子串?求更优实现代码
字符串子串提取优化方案
需求说明
需要从固定格式的字符串中提取目标子串,规则如下:
- 字符串末尾固定为
_AF - 提取
_AF之前、倒数第二个_之后的子串
输入输出示例
input: RT4_MANGO_AF output: MANGO input: RT4_DF5_WE_APPLE_AF output: APPLE input: TF_WE_BANANA_AF output: BANANA input: RT4_DF5_ORANGE_AF output: ORANGE
当前实现代码
sd = 'ER5_WE_APPLE_AF' m = sd[:-3] for i in range(len(m)): if m[i] == "_": si = i else: continue m = m[si+1:] print(m)
优化实现方案
方案1:使用rfind方法
直接利用字符串的rfind方法定位最后一个_的位置,无需手动遍历,代码更高效简洁:
sd = 'ER5_WE_APPLE_AF' trimmed = sd[:-3] # 去掉末尾的"_AF" last_underscore_idx = trimmed.rfind('_') # 从末尾查找最后一个下划线的索引 result = trimmed[last_underscore_idx + 1:] print(result)
rfind方法内部经过优化,能快速定位目标字符,相比手动遍历减少了冗余操作。
方案2:使用split分割字符串
通过分割字符串直接获取目标部分,代码可读性最强:
sd = 'ER5_WE_APPLE_AF' parts = sd[:-3].split('_') # 去掉"_AF"后按下划线分割 result = parts[-1] # 取分割后的最后一个元素 print(result)
这种方式完全利用Python内置方法处理,代码最简洁,适合格式固定的场景。
方案3:正则表达式(适配复杂场景)
如果需要同时验证字符串格式或处理特殊情况,可使用正则表达式:
import re sd = 'ER5_WE_APPLE_AF' match = re.search(r'_([A-Z]+)_AF$', sd) if match: result = match.group(1) print(result)
正则表达式可以精准匹配格式,同时过滤不符合规则的输入,适合需求更灵活的场景。
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

