Skip to main content
 首页 » 编程设计

Python26,re.match 只返回最后一次匹配

2025年05月04日16itcoder

以下是我的源文件内容:

Number= 010010 
Name= Jan Mayen 
Country= NORWAY 
Lat=   70.9 
Long=    8.7 
... 

看来我的表达有重大错误或者对 re.match() 的误解,因为我需要获取所有属性(而不仅仅是最后一个)。

>>> pattern = re.compile(r'^(([^\n]+)=[\ ]*([^\n]+)\n)+') 
>>> print pattern.match(text).groups() 
>>> ('Standard deviations=   3.0   3.0   2.5   1.7   1.0   0.9   0.8   1.1   1.1   1.6  2.2   2.5 \n', 'Standard deviations', '3.0   3.0   2.5   1.7   1.0   0.9 0.8   1.1   1.1   1.6 2.2   2.5 ') 

有什么想法吗?

编辑:哦..后面有不同格式的内容,所以我不想使用 re.findall()

迈克尔

请您参考如下方法:

问题是你在重复你的捕获组:

pattern = re.compile(r'^(...)+') 

这意味着对于每一个匹配项,之前的匹配项都会被覆盖。这是所有正则表达式引擎的预期行为;只有少数(如 .NET)允许以后访问重复组的单个捕获。

所以您实际上需要使用具有正确参数(例如,非重复组)的 re.findall(),避免您不想要的匹配。由于您尚未解释是什么将“后续内容”与您真正想要的内容区分开来,因此我无法在此处进一步详细说明。