Python - 在字符串中定位正则表达式匹配的位置?
我现在正在用正则表达式来搜索RSS源,看看有没有提到某些单词和短语,然后我还想提取匹配内容两边的文本。例如:
String = "This is an example sentence, it is for demonstration only"
re.search("is", String)
我想知道“is”这个词出现的位置,这样我就可以提取并输出类似这样的内容:
1 match found: "This is an example sentence"
我知道用分割的方法很简单,但我需要知道匹配的第一个字符在字符串中的索引位置,而我不知道怎么找到这个位置。
3 个回答
39
re.Match
对象有很多方法,可以帮助你完成这个任务:
>>> m = re.search("is", String)
>>> m.span()
(2, 4)
>>> m.start()
2
>>> m.end()
4
82
我觉得这个问题还没有被完全解答,因为所有的回答都只是给出了单个匹配的例子。提问者的问题展示了有两个匹配项的细微差别,还有一个子串匹配的情况,这个子串不应该被报告,因为它不是一个完整的单词或标记。
要匹配多个出现的情况,可以这样做:
iter = re.finditer(r"\bis\b", String)
indices = [m.start(0) for m in iter]
这样做会返回原始字符串中两个匹配的位置的列表。
104
你可以使用 .find("is")
,它会返回字符串中“is”的位置。
或者可以使用 re 模块中的 .start() 方法。
>>> re.search("is", String).start()
2
实际上,它会匹配“This”中的“is”。
如果你想逐个单词匹配,应该在“is”前后加上 \b
,\b
是表示单词边界的符号。
>>> re.search(r"\bis\b", String).start()
5
>>>
想了解更多关于 Python 正则表达式的信息,可以查看 文档。