我目前正在使用正则表达式搜索RSS提要,以查找是否提到了某些单词和短语,然后还要在匹配的任一侧提取文本。例如:
String = "This is an example sentence, it is for demonstration only"
re.search("is", String)
我想知道找到'是'匹配位置的位置,以便我可以提取和输出这样的内容:
1 match found: "This is an example sentence"
我知道拆分会很容易,但是我需要知道匹配的第一个字符的索引在字符串中是什么,我不知道如何找到
答案 0 :(得分:60)
您可以使用.find("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()