2013-05-13 69 views
0

出现正如标题所说,我有2个串,像:鉴于2串找到索引,其中一个字符串在另一个

string = """ 
for i in x: 
    for y in z[i]: 
     print y 
""" 
s2 = "for" 

我想要得到的是:

[1, 17] # positions where "for" starts in string.. 

是有没有任何内置的功能,或比多个更好的方式find s ??

+0

@AshwiniChaudhary我只是给了一个接近的选票,以我自己的问题.. – pradyunsg 2013-05-13 10:55:29

+0

我很高兴我的回答相呼应接受的答案有! :-)我没有意识到另一个问题的存在。 – 2013-05-13 11:23:22

+0

@MartijnPieters没关系,我也曾这么做过......;) – pradyunsg 2013-05-13 11:34:06

回答

1

你要么使用多的发现,或使用正则表达式和re.finditer()

[match.start() for match in re.finditer(re.escape(s2), string)] 

re.finditer()产生match objects,我们使用re.MatchObject.start() method这里只挑出找到匹配的开始索引。

我使用了re.escape()来防止s2中的正则表达式元字符被解释为确保行为与多个str.find()调用相同。

演示:

>>> import re 
>>> string = """ 
... for i in x: 
...  for y in z[i]: 
...   print y 
... """ 
>>> s2 = "for" 
>>> [match.start() for match in re.finditer(re.escape(s2), string)] 
[1, 17] 
+0

这比多个发现更好.. – pradyunsg 2013-05-13 10:45:59

相关问题