python 字符串函数find功能拓展——查找母串内所有子串的位置

前言  

  我们知道,字符串内置了很多功能的处理函数,其中,find、index函数都可以接受一个参数意义是作为目标子串,而返回母串中从左到右遍历时子串第一次出现的索引值(每一次调用都是从头开始,没有记忆),如果查询不到返回-1。

  如下面的例子:

  如果,子串不在母串中出现,则find函数返回-1,而index方法返回ValueError错误,这也是两者的区别,接上例:


 深入

  rindex rfind函数:功能类似,把母串从右向左遍历,找到子串第一次出现的位置,也没有记忆性。

 


后续

 编写了一个函数,实现find函数类似的功能,但是这次要把所有的子串位置以列表形式返回,这是函数的功能。

 

 1 # coding=utf-8 
 2 def find_all(source,dest):
 3     length1,length2 = len(source),len(dest)
 4     dest_list = []
 5     temp_list = []
 6     if length1 < length2:
 7         return -1
 8     i = 0
 9     while i <= length1-length2:
10         if source[i] == dest[0]:
11             dest_list.append(i)
12         i += 1
13     if dest_list == []:
14         return -1
15     for x in dest_list:
16         print("Now x is:%d. Slice string is :%s"% (x,repr(source[x:x+length2])),end=" ")
17         if source[x:x+length2] != dest:
18             print(" dest != slice")
19             temp_list.append(x)
20         else:
21             print(" dest == slice")
22     for x in temp_list:
23         dest_list.remove(x)
24     return dest_list
25 
26 s1="He!wworld!www.baidu.cowws.cowwppww"
27 s2="ww"
28 index_list = find_all(s1,s2)
29 if index_list != -1:
30     print("Now dest_list is:{}".format(index_list))
31 else:
32     print("Error finding!")

 

posted @ 2019-03-31 17:45  爱吃砂糖橘的白龙  阅读(7206)  评论(0编辑  收藏  举报