Найти первое вхождение подстроки перед индексом - PullRequest
0 голосов
/ 11 июня 2018

Есть ли аналогия с myStr.find(subStr, startInd), чтобы получить индекс первого вхождения subStr до my startInd.Как сделать шаг -1 вместо 1 из startInd?

Редактировать

Вот пример:

myStr = "(I am a (cool) str)"

startInd = 9  # print(myStr[startInd]) -> "c"

print(myStr.find(")", startInd))  # -> 13
print(myStr.findBefore("(", startInd))  # -> 8

Редактировать II

Следующий код решает мою проблему, но это не совсем удобно.Хотел спросить, есть ли простой способ выполнить эту задачу

startInd = 9

myStr = "(I am a (cool) str)"

print(myStr.find(")", startInd))  # -> 13
print(len(myStr[::-1]) - myStr[::-1].find("(", len(myStr[::-1]) - startInd - 1) - 1)  # -> 8

1 Ответ

0 голосов
/ 11 июня 2018

str.find принимает необязательный параметр end:

str.find (sub [, start [, end]])

Возвращает самый низкий индекс в строке, где подстрока sub найдена в срезе s [start: end].Необязательные аргументы start и end интерпретируются как в обозначениях слайсов.

Итак, если вы хотите, чтобы subStr до end до endIndex, вы можете использовать myStr.find(subStr, 0, endIndex):

>>> 'hello world'.find('ello', 0, 5)
1
>>> 'hello world'.find('ello', 0, 4)  # "ello" ends at index 5, so it's not found
-1
>>> 'hello world'[0:4]
'hell'

Если вы хотите от subStr до начинать в любом месте до endIndex, вы должны использовать myStr.find(subStr, 0, endIndex + len(subStr)) вместо:

>>> 'hello world'.find('ello', 0, 1 + len('ello'))
1
>>> 'hello world'.find('ello', 0, 0 + len('ello'))  # it starts at index 1, so it's not found
-1
...