正如标题所说,我有 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 更好的方法?
您要么使用多个查找,要么使用正则表达式和re.finditer()
:
[match.start() for match in re.finditer(re.escape(s2), string)]
re.finditer()
产生匹配对象,我们使用这里的re.MatchObject.start()
方法来挑选找到的匹配项的开始索引。
我曾经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]