本篇内容主要讲解“如何用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查找子串所在位置”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/220147.html