i am having a python string of format
mystr = "hi.this(is?my*string+"
here i need to get the position of 'is' that is surrounded by special characters or non-alphabetic characters (i.e. second 'is' in this example). however, using
mystr.find('is')
will return the position if 'is' that is associated with 'this' which is not desired. how can i find the position of a substring that is surrounded by non-alphabetic characters in a string? using python 2.7
Python String find() method returns the lowest index or first occurrence of the substring if it is found in a given string. If it is not found, then it returns -1.
index() Parameters The index() method takes three parameters: sub - substring to be searched in the string str . start and end(optional) - substring is searched within str[start:end]
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With