Python字符串截取与切片详解:从基础索引到自定义函数实现
本文深入解析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/
以上为个人经验总结,希望能为读者提供有益参考,欢迎支持本站更多内容。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













