16

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

srek
  • 313
  • 2
  • 4
  • 9

1 Answers1

16

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.

Gareth Latty
  • 86,389
  • 17
  • 178
  • 183
  • You should actually use `\b` for that. – georg May 13 '12 at 13:59
  • `re.search(r'\bis\b')` - otherwise you match the preceding symbol as well and the position is wrong. – georg May 13 '12 at 14:00
  • @thg435 The asker said *non-alphabetic* not *non-alphanumeric*, so `\b` won't work - but good point on the position being wrong, didn't catch that, fixed. – Gareth Latty May 13 '12 at 14:01
  • besides, your expr fails to match at the beginning/end. You still need a lookaround here. – georg May 13 '12 at 14:04
  • @thg435 The OP asked for `"is"` where *surrounded* by non-alphabetic characters - at the beginning or end that is not the case. – Gareth Latty May 13 '12 at 14:06
  • I wouldn't rely that much on what they _say_. As usual on SO, the question is vague and confusing, and it's your job as an answerer to guess (or ask) what they _actually_ trying to achieve. – georg May 13 '12 at 14:10
  • @thg435 I added some clarification, but I will answer the given question. If the asker needs something else, they will have to make their question clearer. – Gareth Latty May 13 '12 at 14:11