Here the best option is to use a regular expression. Python has the re module for working with regular expressions.
We use a simple search to find the position of the "is":
>>> match = re.search(r"[^a-zA-Z](is)[^a-zA-Z]", mystr)
This returns the first match as a match object. We then simply use MatchObject.start() to get the starting position:
>>> match.start(1)
8
Edit: A good point made, we make "is" a group and match that group to ensure we get the correct position.
As pointed out in the comments, this makes a few presumptions. One is that surrounded means that "is" cannot be at the beginning or end of the string, if that is the case,  a different regular expression is needed, as this only matches surrounded strings.
Another is that this counts numbers as the special characters - you stated non-alphabetic, which I take to mean numbers included. If you don't want numbers to count, then using r"\b(is)\b" is the correct solution.