开发者

python如何查找所有子串位置

开发者 https://www.devze.com 2023-01-04 09:21 出处:网络 作者: cv_lhp
目录python 查找所有子串位置方法1方法2Python小知识:查找子串问题查找子串in 操作符find函数index函数总结python 查找所有子串位置
目录
  • python 查找所有子串位置
    • 方法1
    • 方法2
  • Python小知识:查找子串问题
    • 查找子串
    • in 操作符
    • find函数
    • index函数
  • 总结

    python 查找所有子串位置

    方法1

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

    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('王嘉尔'))javascript
    print(s2.find('王嘉尔') != -1)

    运行结果:

    0

    True

    -1

    False

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

    index函数

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

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

    运行结果是:

    0

    True

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

    看下面的代码:

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

    运行结果是:

    ValueError: substring not found

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

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

    总结

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

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号