温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用python查找子串所在位置

发布时间:2021-12-18 14:35:32 来源:亿速云 阅读:411 作者:iii 栏目:大数据

本篇内容主要讲解“如何用python查找子串所在位置”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用python查找子串所在位置”吧!

示例代码

string = "abcdcdefg"
print string.index('cde')

用index方法实现一个查找子串所在位置的方法,看下面两个字符串:

string = "abcdcdefg"
sub = "cde"

通过观察你会发现,sub这个字符串在string是存在的,且起始位置为4,这就是我们要获得的结果。


逻辑分析
  • sub的第一个字符是c,我应该先在string中找到一个字符c,这个位置可能就是子串cde开始的位置,当然也可能不是,string中就有一段是cdc,前两个字符确实一样,但是第三个字符不一样,不过没关系,我们先把string中的c字符找到再说

  • 在string中找到c这个字符后,应该接着比较剩余的部分,如果剩余的部分都对应得上,便找到了子串的开始位置


示例代码

#coding=utf-8
string = "abcdcdefg"
sub = "cde"
i = 0
#注意这种赋值方式,简单,不用写多行
string_len,sub_len = len(string),len(sub)
# 记录子串的起始位置
index = -1

# 循环无处不在
while i < string_len:
   # 一定要先找到和sub[0]相等的字符
   if string[i] == sub[0]:
       index,m = i,i
       j = 0
       #接下来要比较剩余的部分
       while j< sub_len and m < string_len \
               and string[m] == sub[j]:
           m += 1
           j += 1

       # 最精妙的地方是这段代码
       if not j == sub_len:
           index = -1
       else:
           break

   i += 1

print index


程序分析
  • string_len,sub_len = len(string),len(sub) 是非常便捷的变量赋值方式,如果不这么写,就得分成两条语句

  • 对于while 循环,与for循环不同的地方在于,你必须牢牢的控制循环的条件,也就是while 后面所跟着的表达式,它们决定了循环何时结束

  • 在第二个while循环开始前,我创建了一个名为m的变量,而没有继续使用i作为比较时所用的索引,这是因为i被用来控制外层的while循环,如果我在第二个循环里执行了i += 1,就会影响到第一个while循环,不要忘记第一个while循环是用来寻找和sub[0] 相等的字符位置的,如果i被无故的加1 了,那么第一个while循环时必然会有某一个字符没有被遍历到

  • 程序最精妙的地方在于 if not j == sub_len: 我如何知道在第二个while循环结束后就匹配到了子串呢?如果j的值和sub_len相等,就说明子串被匹配到了,因为在循环结束后,j 等于 sub_len,说明sub的每一个字符都被遍历到了,而且与string中的某一部分一一对应,否则,循环会因为不满足条件而中断。我让index 在第二个while循环开始前就等于i,这样,便记录了子串可能开始的位置,如果j确实等于sub_len了,那么index 就是子串开始的位置,如果 j 与 sub_len 不相等,index 的值就不是子串的开始位置,因此要重新赋值为-1

  • break只有在找到子串开始位置时才会执行,因为我不想继续找了,即便后面还有子串

到此,相信大家对“如何用python查找子串所在位置”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI