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读取数据集并消除数据中的空行方法

    Python读取数据集并消除数据中的空行方法

    今天小编就为大家分享一篇Python读取数据集并消除数据中的空行方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python小整数对象池和字符串intern实例解析

    Python小整数对象池和字符串intern实例解析

    这篇文章主要介绍了Python小整数对象池和字符串intern实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python保留格式汇总各部门excel内容的实现思路

    python保留格式汇总各部门excel内容的实现思路

    这篇文章主要介绍了python保留格式汇总各部门excel内容,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 浅析Python条件语句中的解密逻辑与控制流

    浅析Python条件语句中的解密逻辑与控制流

    这篇文章主要想来和大家一起探索一下Python条件语句的奇妙世界——解密逻辑与控制流,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-07-07
  • python字典setdefault方法和get方法使用实例

    python字典setdefault方法和get方法使用实例

    这篇文章主要介绍了python字典setdefault方法和get方法使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T

    tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU

    这篇文章主要介绍了tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python爬虫Xpath定位数据的两种方法

    Python爬虫Xpath定位数据的两种方法

    这篇文章主要介绍了Python爬虫Xpath定位数据的方法,第一种方法直接右键,将文章路径复制下来点击Copy full Xpath,方法二使用@制定标签属性,搜索指定位置,每种方法给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • python用pyinstaller封装exe双击后疯狂闪退解决办法

    python用pyinstaller封装exe双击后疯狂闪退解决办法

    本文主要介绍了python用pyinstaller封装exe双击后疯狂闪退解决办法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Python常用爬虫代码总结方便查询

    Python常用爬虫代码总结方便查询

    今天小编就为大家分享一篇关于Python常用爬虫代码总结方便查询,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • tensorflow多维张量计算实例

    tensorflow多维张量计算实例

    今天小编就为大家分享一篇tensorflow多维张量计算实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论