0

正如标题所说,我有 2 个字符串,例如:

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

我想要得到的是:

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

是否有任何内置功能,或者比多个finds 更好的方法?

4

1 回答 1

1

您要么使用多个查找,要么使用正则表达式和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]
于 2013-05-13T10:42:37.397 回答