文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python如何查找所有子串位置

2023-01-03 12:01

关注

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可以应用的范围更广。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯