2012-05-13 80 views
11

我有格式的Python字符串找到字符串中的子串的位置

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

在這裏,我需要得到的「是」的位置是由特殊字符或非字母字符包圍(即第二'是'在這個例子中)。然而,使用

mystr.find('is') 

將返回的位置,如果'是'是與'this'這是不需要的。我怎麼才能找到一個字符串中的非字母字符包圍的子字符串的位置?使用python 2.7

回答

13

這裏最好的選擇是使用正則表達式。 Python有the re module用於處理正則表達式。

我們用一個簡單的搜索來查找"is"的位置:

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

這將返回第一個匹配作爲匹配對象。然後,我們簡單地使用MatchObject.start()獲得首發位置:

>>> match.start(1) 
8 

編輯:做一個很好的點,我們做"is" A組和匹配組,以確保我們得到正確的位置。

正如評論中指出的那樣,這只是一些假設。一個是包圍意味着"is"不能在字符串的開始或結尾,如果是這樣的話,需要不同的正則表達式,因爲這隻能匹配包圍的字符串。

另一個原因是,這個計算的數字爲特殊字符 - 你說非字母,我走的意思數包括在內。如果你不想要數字,那麼使用r"\b(is)\b"是正確的解決方案。

+0

你實際上應該使用'\ b'。 – georg

+0

@ thg435對不起,對不起? –

+0

're.search(r'\ bis \ b')' - 否則您也匹配前面的符號,並且位置錯誤。 – georg

相關問題