Найти позицию подстроки в строке

У меня есть строка стиля python

mystr = "hi.this(is?my*string+"

здесь мне нужно получить позицию "is" , которая окружена специальными символами или неалфавитными символами (то есть второй "is" в этом примере). однако, используя

mystr.find('is')

вернет позицию, если "is" , которая связана с 'this', которая не нужна. как я могу найти позицию подстроки, которая окружена неалфавитными символами в строке? используя python 2.7

Ответ 1

Здесь лучший вариант - использовать регулярное выражение. Python имеет модуль re для работы с регулярными выражениями.

Мы используем простой поиск, чтобы найти положение "is":

>>> match = re.search(r"[^a-zA-Z](is)[^a-zA-Z]", mystr)

Это возвращает первое совпадение в качестве объекта соответствия. Затем мы просто используем MatchObject.start(), чтобы получить начальную позицию:

>>> match.start(1)
8

Изменить: хорошая точка сделана, мы делаем группу "is" и сопоставляем эту группу, чтобы обеспечить правильную позицию.

Как отмечается в комментариях, это делает несколько презумпций. Один из них заключается в том, что "is" не может быть в начале или конце строки, если это так, требуется другое регулярное выражение, так как это соответствует только окруженным строкам.

Другим является то, что это подсчитывает числа как специальные символы - вы указали неалфавитный текст, который я принимаю, чтобы обозначать числа, включенные. Если вы не хотите, чтобы числа учитывались, то использование r"\b(is)\b" является правильным решением.