3

我正在尝试在文档中的关键词和关键词本身之间捕获文本。

例如,假设我在一个字符串中有多个“egg”实例。我想捕捉“蛋”和“蛋”之间的每一个作品。

我努力了:

import re
text = "egg hashbrowns egg bacon egg fried milk egg"
re.findall(r"(/egg) (.*) (/egg)", text)

我也试过re.matchre.search

我通常得到的是("egg"), ("hashbrowns egg bacon egg fried milk"), ("egg")

我需要得到的是(egg, hashbrown, egg), (egg, bacon egg), (egg, fried, milk, egg).

对于此事,我将不胜感激。

4

1 回答 1

2

您需要使用非贪婪匹配。是的*?非贪心形式*,匹配最小的可能序列。此外,/egg完全匹配,但我假设你只是想要egg,所以你的实际正则表达式变成(egg) (.*?) (egg). 但是,由于正则表达式会在匹配字符串时使用它,因此您需要使用前瞻和后瞻断言来匹配中间文本。在这种情况下,(?<=egg) (.*?) (?=egg)查找前后带有“egg”的文本,但只返回中间的内容,即['hashbrowns', 'bacon', 'fried milk']. 尝试匹配“egg”也将复杂得多,并且可能涉及两次解析字符串,所以如果这实际上是你想要的,那么它唯一值得去研究它。

所有这些都记录在python 文档中,因此请在此处查找更多信息。

于 2012-12-06T15:34:27.800 回答