2013-05-13 75 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

相關問題