2010-04-20 70 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] 

这将返回这两个指数的名单中原来的字符串。