我在文件中有一堆行,其中一个或两个具有相同模式(id =):
Linetype1 : ...id=1234...id=4321...value=5678... # "..." means whatever
Linetype2 : ...id=7890...value=8765
我以为我可以编写这样一个正则表达式来grep我所有的id和相关值:
>>> l="...id=1234...id=4321...value=5678...\n...id=7890...value=8765\n"
>>> ret = re.findall('(id=[0-9]+).*?(id=[0-9]+)*.*?(value=[0-9]+)',l)
[('id=1234', '', 'value=5678'), ('id=7890', '', 'value=8765')]
我无法获得第二个“id = 4321”部分。 这对我来说很奇怪,因为我使用非贪婪。*?在第一个id = [0-9] +和第二个之间。
答案 0 :(得分:0)
正则表达式的中间位置
(id=[0-9]+)*
空字符串与此匹配,因为它位于Kleene星*
下。因此正则表达式引擎按字符串进行如下操作:
id=[0-9]+
组.*?
展开为空字符串,因为它匹配(id=[0-9]+)
*展开为空字符串,因为它匹配.*?
展开到字符串的其余部分如果用+
替换中间组的量词,或者只是将其完全删除,那么它就可以了。