Python查找第n个子串的技巧分享


Posted in Python onJune 27, 2018

Problem

Python中str类自带的find、index方法可以返回第一个匹配的子串的位置,但是如果实际使用中需要查找第2个甚至第n个子串的位置该怎么办呢。也许有的码友可能会用到第二第三个参数,指定查找的起始、终止位置。但是在很多情况下,接收到的一个字符串可能是未知的,强制限定起始位置可能导致代码在某些情况下不能适用。

Solution

采用嵌套的方法调用find或者index。

str_exp = "aaabbbbccc"
 pos_n = str_exp.index("a", str_exp.index("a")+1)
 print(pos_n)

原理很简单,第一次查找返回的位置加1作为第二次查找的起始参数。加1是因为start参数位置是被包含的,采用的闭区间的语义。也不用担心会越界,python底层已经做了处理。

也可以写一个单独的函数来进行查找操作。

def find_n_sub_str(src, sub, pos, start):
 index = src.find(sub, start)
 if index != -1 and pos > 0:
  return find_n_sub_str(src, sub, pos - 1, index + 1)
 return index

pos表示第n个子串,从0开始。start为起始位置。此处使用find而不用index是因为index在查找失败时会报出异常,而find不报异常返回-1。从健壮性考虑使用find。

看来递归使用起来还是可以解决很多编程实践过程中遇到的工程问题。:)

Attention

1、左闭右开特性

str.index(self, sub, start=None, end=None)
str_tmp[start:end]

默认的是左闭右开,即包含start的位置,却不包含end的位置。在使用过程中需要注意一下。同样左闭右开的还有切片操作str_tmp[start:end]。

示例如下:

str_exp = "aaabbbbccc"
 print(str_exp)
 print(str_exp[str_exp.index("a"):str_exp.rindex("c")])
aaabbbbccc
aaabbbbcc

2、find与index差别

find是不会报出异常的,即查找子串失败的情况下返回-1,而index在查找子串失败时会报异常。

示例如下:

str_tmp = "aaaabbbbccccdddd"
 print(find_n_sub_str(str_tmp, "a", 5, 0))
 print(str_tmp.find("a", 7))
 print(str_tmp.index("a", 7))
-1
-1
Traceback (most recent call last):
 File "/usr/local/pycharm-community-5.0.4/helpers/pydev/pydevd.py", line 2411, in <module>
 globals = debugger.run(setup['file'], None, None, is_module)
 File "/usr/local/pycharm-community-5.0.4/helpers/pydev/pydevd.py", line 1802, in run
 launch(file, globals, locals) # execute the script
 File "/usr/local/pycharm-community-5.0.4/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
 exec(compile(contents+"\n", file, 'exec'), glob, loc) 
 File "/usr/local/workspace/pycharmPro/StockAI/StockAI/DbDealer.py", line 140, in <module>
 print(str_tmp.index("a", 7))
ValueError: substring not found

以上这篇Python查找第n个子串的技巧分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的yield浅析
Jun 16 Python
Python中元组,列表,字典的区别
May 21 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python类的实例化问题解决
Aug 31 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python des,aes,rsa加解密的实现
Jan 16 Python
在PyCharm中安装PaddlePaddle的方法
Feb 05 Python
Python基础知识学习之类的继承
May 31 Python
python numpy 部分排序 寻找最大的前几个数的方法
Jun 27 #Python
获取python的list中含有重复值的index方法
Jun 27 #Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 #Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 #Python
使用Python对微信好友进行数据分析
Jun 27 #Python
python实现列表中由数值查到索引的方法
Jun 27 #Python
numpy返回array中元素的index方法
Jun 27 #Python
You might like
php文件操作实例代码
2012/05/10 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
composer.lock文件的作用
2016/02/03 PHP
javascript OFFICE控件测试代码
2009/12/08 Javascript
用jQuery扩展自写的 UI导航
2010/01/13 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python数据结构之翻转链表
2017/02/25 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
python format 格式化输出方法
2018/07/16 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Python画图高斯分布的示例
2019/07/10 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python实现代码统计器
2019/09/19 Python
python的slice notation的特殊用法详解
2019/12/27 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python用Configobj模块读取配置文件
2020/09/26 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
医学院毕业生自荐信
2013/11/08 职场文书
如何写好升职自荐信
2014/01/06 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
2015年少先队活动总结
2015/03/25 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python
python实现商品进销存管理系统
2022/05/30 Python