如何在位置索引之前找到子字符串的位置?

时间:2018-02-12 08:17:36

标签: python string

我有一个名为s:

的字符串
s = "Temperature is 15 degree Celsius. It is expected to be hotter tomorrow, say, 20 degree Celsius."

我希望在向后方向找到最接近"degree"的单词"tomorrow"

首先,我找到'tomorrow'的位置,然后从先前找到的位置向后搜索,找到单词"degree"

第一步是:

index = s.index('tomorrow')

如何进行第二步?

3 个答案:

答案 0 :(得分:3)

这是你想要的吗?

index = s.index('tomorrow')
index2 = s.rfind('degree', 0, index)

答案 1 :(得分:0)

如你所说,找到“明天”的位置,接下来,你使用 rfind (找到右边),你会找到离“明天”最近的位置。

s = "Temperature is 15 degree Celsius. It is expected to be hotter tomorrow, say, 20 degree Celsius."
index = s[0:s.index("tomorrow")].rfind("degree")

答案 2 :(得分:0)

此递归生成器函数生成另一个字符串中两个子字符串的所有索引对。然后,您可以使用min和适当的键函数来查找索引最接近的那个:

def pairs(s, s1, s2, i=0):
    i1 = s.find(s1, i)   # start looking at index i
    i2 = s.find(s2, i1)  # start looking at index i1
    if i2 < 0 or i1 < 0:  # one wasn't found
        return
    yield i1, i2
    yield from pairs(s, s1, s2, i2)

s = 'xx ab cd xxx ab xx cd'
s1, s2 = 'ab', 'cd'
l = list(pairs(s, s1, s2))
# [(3, 6), (13, 19)]
min(l, key=lambda x: x[1]-x[0])  # indexes of s1, s2 in s where they are closest
# (3, 6)