Python字符串截取与切片详解:从基础索引到自定义函数实现

沈亦白
沈亦白
发布时间:2026-10-16 | 5人浏览过
原创

本文深入解析Python中字符串截取与切片的核心机制,涵盖正向与反向索引规则、切片语法[start:end:step]的具体用法及实例演示。同时提供两种自定义字符串截取函数的实现方案,分别适用于单次提取和批量提取特定标签间内容的场景,助力开发者高效处理XML、JSON等字符串数据。

Python字符串截取与切片详解:从基础索引到自定义函数实现

在实际开发场景中,经常需要从字符串中提取特定标签或分隔符之间的内容,这在网络爬虫处理XML报文、JSON字符串或其他格式文本时尤为常见。

为此,本文整理并分享了两种实用的字符串截取函数,旨在为相关开发工作提供参考案例。

# 方法一:简单截取不重复标签中的内容
def substr(mystr, startStr, endChar):
    '''
    自定义字符串截取函数:只从字符串中第一次遇见的内容
    '''
    startStr_len = len(startStr)
    start_index = mystr.index(startStr)
    end_index = mystr.index(endChar)
    return mystr[start_index+startStr_len:end_index]
 
'''
a = 'abc111bcd abc222bcd'
result = substr(a, 'abc', 'bcd')    # result='111'
'''
 
# 方法二:重复截取标签中的内容并将结果作为列表返回
def substr_to_list(mystr, startStr, endChar):
    '''自定义字符串截取函数'''
    result = []
    position = 0
    while True:                # 因为index()函数如果没有找到想要的内容会报异常ValueError
        try:            
            startStr_len = len(startStr)
            endChar_len = len(endChar)
            start_index = mystr.index(startStr, position)
            end_index = mystr.index(endChar, position)
            position = end_index + endChar_len
            result.append(mystr[start_index+startStr_len:end_index])
        except Exception as e:
            break
    return result
'''
a = 'abc111bcd abc222bcd'
result = substr(a, 'abc', 'bcd')    # result=['111','222']
'''

此处主要关注功能实现,暂不深入探讨执行效率问题,毕竟在Python开发中,可读性与开发效率往往优先于极致的性能优化。

字符串切片基础

索引机制

字符串本质上是由一系列字符按顺序排列组成的序列,每个字符对应一个唯一的顺序编号,即索引(index)。Python支持通过索引访问字符串中的单个字符或多个字符片段,例如获取指定位置的字符或查询字符对应的索引值。

单个字符访问

已知字符串名称后,可通过方括号[ ]指定索引值来访问对应字符,基本语法结构如下:

strname[index]

其中strname代表字符串变量名,index代表具体的索引数值。

Python支持从字符串两端进行索引访问:

  • 正向索引:以字符串起始端为基准,索引从0开始递增,即第一个字符索引为0,第二个为1,第三个为2,依此类推。
  • 反向索引:以字符串末尾为基准,索引从-1开始递减,即最后一个字符索引为-1,倒数第二个为-2,倒数第三个为-3,以此类推。

具体操作示例如下:

url = 'http://c.biancheng.net/python/'
#获取索引为10的字符
print(url[10])
#获取索引为 6 的字符
print(url[-6])

代码执行输出结果:

i y

多字符截取(字符串切片)

除了通过方括号获取单个字符外,还可以指定索引范围来截取子串或片段,具体语法格式为:

strname[start : end : step]

各参数含义说明如下:

  • strname:目标字符串对象;
  • start:截取起始位置的索引值(包含该位置字符)。若省略,默认值为0,即从字符串开头开始截取;
  • end:截取结束位置的索引值(不包含该位置字符)。若省略,默认值为字符串长度,即截取至末尾;
  • step:步长参数,表示从start索引处开始,每隔step个距离取一个字符,直至end索引前。默认值为1,若省略此参数,末尾的冒号也可一并省略。

【示例1】基础切片用法:

url = 'http://c.biancheng.net/java/'
#获取索引从7处到22(不包含22)的子串
print(url[7: 22]) # 输出 zy
#获取索引从7处到-6的子串
print(url[7: -6]) # 输出 zyit.org is very
#获取索引从-21到6的子串
print(url[-21: -6])
#从索引3开始,每隔4个字符取出一个字符,直到索引22为止
print(url[3: 22: 4])

运行结果:

c.biancheng.net c.biancheng.net c.biancheng.net pcaen

【示例2】高级切片用法:start、end、step三个参数均可省略:

url = 'http://c.biancheng.net/java/'
#获取从索引5开始,直到末尾的子串
print(url[7: ])
#获取从索引-21开始,直到末尾的子串
print(url[-21: ])
#从开头截取字符串,直到索引22为止
print(url[: 22])
#每隔3个字符取出一个字符
print(url[:: 3])

运行结果:

c.biancheng.net/java/ c.biancheng.net/java/ http://c.biancheng.net hp/bne.ta/

以上为个人经验总结,希望能为读者提供有益参考,欢迎支持本站更多内容。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表