Python - 在字符串中定位正则表达式匹配的位置?

时间:2010-04-20 10:49:00

标签: python regex

我目前正在使用正则表达式搜索RSS提要,以查找是否提到了某些单词和短语,然后还要在匹配的任一侧提取文本。例如:

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

我想知道找到'是'匹配位置的位置,以便我可以提取和输出这样的内容:

1 match found: "This is an example sentence"

我知道拆分会很容易,但是我需要知道匹配的第一个字符的索引在字符串中是什么,我不知道如何找到

4 个答案:

答案 0 :(得分:60)

您可以使用.find("is"),它会在字符串

中返回“is”的位置

或从re

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

实际上它的匹配“是”来自“Th

如果您需要匹配每个字词,则应在“是”之前和之后使用\b\b是字边界。

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

有关python正则表达式的更多信息,docs此处

答案 1 :(得分:32)

我认为这个问题还没有完全回答,因为所有答案都只提供单个匹配示例。 OP的问题证明了2个匹配的细微差别以及不应报告的子串匹配,因为它不是单词/标记。

要匹配多个匹配项,可以执行以下操作:

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

这将返回原始字符串的两个索引的列表。

答案 2 :(得分:20)

re.Match objects have a number of methods为您提供帮助:

>>> m = re.search("is", String)
>>> m.span()
(2, 4)
>>> m.start()
2
>>> m.end()
4

答案 3 :(得分:0)

免责声明:
上面的解决方案很好,但是您可能会得到'NoneType' object has no attribute 'span'这样的错误,请谨慎使用。您的程序可能会失败。由于在字符串
解决方案
if obj: print obj.span()

中找不到该模式,因此出现错误。