2010-04-20 72 views
23

我目前正在使用正則表達式來搜索RSS提要,以查找是否提及某些單詞和短語,然後想要在匹配的任一側提取文本。例如:Python - 查找字符串中正則表達式匹配的位置?

String = "This is an example sentence, it is for demonstration only" 
re.search("is", String) 

我想知道在哪裏的「是」的位置(一個或多個)找到匹配的,這樣我可以提取和輸出是這樣的:

1 match found: "This is an example sentence" 

我知道這將很容易做分裂,但我需要知道什麼比賽的第一個字符的索引是在字符串中,我不知道如何找到

+2

你實際上在你的例子中發現「is」兩次。 – extraneon 2010-04-20 10:51:49

回答

38

您可以使用.find("is"),它會返回字符串「is」的位置

或使用。開始()從重新

>>> re.search("is", String).start() 
2 

其實它的對手「是」從「號

如果你需要每個字匹配,你前後應使用\b 「is」,\b是單詞邊界。

>>> re.search(r"\bis\b", String).start() 
5 
>>> 

約蟒蛇正則表達式的更多信息,docs這裏

+0

不知道我是如何在文檔中錯過的,完全是我需要的,謝謝! – 2010-04-20 10:57:27

+0

如果你想抓住單詞「is」,我認爲're.search(「是」,String).start()'也應該是單詞..當然還有其他的例子。 – kuskmen 2015-11-04 20:57:15

+0

如果沒有匹配,re.search將返回None,請小心。 – rstackhouse 2017-01-05 14:09:19

19

我不認爲這個問題已經完全仍不回答,因爲所有的答案只給出單個匹配的例子。 OP的問題展示了2個匹配的細微差別以及一個不應該被報告的子串匹配,因爲它不是一個單詞/標記。

爲了配合多次出現,人們可能會做這樣的事情:

iter = re.finditer(r"\bis\b", String) 
indices = [m.start(0) for m in iter] 

這將返回這兩個指數的名單中原來的字符串。