python如何查找所有子串位置

 更新时间:2023年01月03日 10:38:38   作者:cv_lhp  
这篇文章主要介绍了python如何查找所有子串位置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python 查找所有子串位置

方法1

python 字符串中的find只能返回第一次出现的位置,可以利用find找出多有子串出现的位置:

def find_all(sub,s):
    index_list = []
    index = s.find(sub)
    while index != -1:
        index_list.append(index)
        index = s.find(sub,index+1)
    
    if len(index_list) > 0:
        return index_list
    else:
        return -1

方法2

使用re包来实现,直接通过循环来实现,然后返回找到的pattern的起始位置和终止位置。

import re
string = 'You said I was your life. Are you still alive when you lost it?'
pattern = 'you'
for m in re.finditer(pattern, string):
    print(m.start(), m.end()) 

补充

1、str.find()函数:检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1。

str.find(substring, beg=0, end=len(string))

2、str.index()函数:跟find()方法一样,只不过如果str不在 string中会报一个异常。

str.index(substring, beg=0, end=len(string))

Python小知识:查找子串问题

查找子串

查找一个字符串中是否包含某个关键词(查找子串问题)是很常见的操作。比如:给定一句话s,查找s中是否包含关键词王嘉尔。

今天来说3个相关的方法,以及它们的区别和优缺点。

in 操作符

如果只是为了判断s中是否包含王嘉尔,最推荐的做法是用in或者not in操作符:

s = '王嘉尔小时候卖过猪'
print('王嘉尔' in s)

s2 = '王嘉尔小时候吃过猪'
print('王嘉尔' in s2)

in操作符返回True或者False,而且运行最快,是首选!

咱们加深一下,每一个Python的操作符背后都有一个魔法方法。当我们使用in操作符的时候,它调用的是__contains__方法。

如果我们自己定义一个类,也要支持in和not in运算符,只要实现__contains__方法就可以了。

find函数

s = '王嘉尔小时候卖过猪'
print(s.find('王嘉尔'))
print(s.find('王嘉尔') != -1)

s2 = '王嘉尔小时候吃过猪'
print(s2.find('王嘉尔'))
print(s2.find('王嘉尔') != -1)

运行结果:

0
True
-1
False

find函数返回子串的下标,如果找不到就返回-1。s中包含王嘉尔,返回下标0。我们可以通过比较返回值和-1来确定是否包含子串。

index函数

index函数和find类似,也是返回子串在父串中的下标:

s = '王嘉尔小时候卖过猪'
print(s.index('王嘉尔'))
print(s.index('王嘉尔') != -1)

运行结果是:

0
True

但是index和find有个大的差别,如果父串中没有包含子串,会报ValueError。

看下面的代码:

s2 = '王嘉尔小时候吃过猪'
print(s2.index('王嘉尔'))

运行结果是:

ValueError: substring not found

看起来index比较弱,为什么它还有存在的价值呢?因为index是序列(sequence)的方法,在字符串,列表,元组中都可以用,而find是字符串特有的函数。

小结一下:如果只是看是否存在,直接用in操作符;如果还要找出下标,用find不会报错,但是index可以应用的范围更广。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python实现0到1之间的随机数方式

    python实现0到1之间的随机数方式

    这篇文章主要介绍了python实现0到1之间的随机数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 使用python创建图片格式转换器的实现步骤

    使用python创建图片格式转换器的实现步骤

    本教程将指导如何使用 Python 编写的图片格式转换工具 ImaCon_ter.py,该工具能够将图片从一种格式转换为另一种格式,文章通过代码示例讲解的非常详细,感兴趣的小伙伴跟着小编一起来看看吧
    2024-12-12
  • python3 实现的对象与json相互转换操作示例

    python3 实现的对象与json相互转换操作示例

    这篇文章主要介绍了python3 实现的对象与json相互转换操作,结合实例形式分析了Python3使用json模块针对json格式数据转换操作的相关实现技巧,需要的朋友可以参考下
    2019-08-08
  • Jupyter notebook 输出部分显示不全的解决方案

    Jupyter notebook 输出部分显示不全的解决方案

    这篇文章主要介绍了Jupyter notebook 输出部分显示不全的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • YOLOv5构建安全帽检测和识别系统使用详解

    YOLOv5构建安全帽检测和识别系统使用详解

    这篇文章主要为大家介绍了YOLOv5构建安全帽检测和识别系统使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Python面向对象类的继承实例详解

    Python面向对象类的继承实例详解

    这篇文章主要介绍了Python面向对象类的继承,结合实例形式详细分析了Python面向对象程序设计中类的继承原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-06-06
  • python re正则匹配网页中图片url地址的方法

    python re正则匹配网页中图片url地址的方法

    今天小编就为大家分享一篇python re正则匹配网页中图片url地址的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python实现PPT幻灯片的添加、删除或隐藏操作

    Python实现PPT幻灯片的添加、删除或隐藏操作

    PowerPoint文档是商务、教育、创意等各领域常见的用于展示、教育和传达信息的格式,在制作PPT演示文稿时,灵活地操作幻灯片是提高演示效果、优化内容组织的关键步骤,本文给大家介绍了Python 操作PPT幻灯片- 添加、删除、或隐藏幻灯片,需要的朋友可以参考下
    2024-08-08
  • Python实现快速排序的方法详解

    Python实现快速排序的方法详解

    这篇文章主要介绍了Python实现快速排序的方法,结合实例形式详细分析了快速排序的思路、原理及Python具体实现技巧与相关操作注意事项,需要的朋友可以参考下
    2019-10-10
  • python支持多继承吗

    python支持多继承吗

    在本篇文章里小编给大家整理的是关于python支持多继承的相关基础知识点,需要的朋友们跟着学习参考下。
    2020-06-06

最新评论