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

如何从指定字符串提取子串?求更优实现代码

字符串子串提取优化方案

需求说明

需要从固定格式的字符串中提取目标子串,规则如下:

  • 字符串末尾固定为_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:03