以下是我的源文件的内容:
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()
迈克尔
答案 0 :(得分:6)
问题在于您正在重复捕获组:
pattern = re.compile(r'^(...)+')
这意味着每次比赛都会覆盖上一场比赛。这是所有正则表达式引擎中的预期行为;只有少数(如.NET)允许以后访问重复组的各个捕获。
所以你实际上需要使用具有正确参数的re.findall()
(例如,非重复组),避免你不想要的匹配。既然你没有解释除了你真正想要的内容之外的“跟随内容”的内容,我在这里就不能详细说明了。
答案 1 :(得分:3)
您可能需要.findall()
pattern = re.compile(r'^(([^\n]+)=[\ ]*([^\n]+)\n)', re.MULTILINE)
pattern.findall(data)
蒂姆的回答给出了更多背景知识。
答案 2 :(得分:2)
>>> text = '''Number= 010010
Name= Jan Mayen
Country= NORWAY
Lat= 70.9
Long= 8.7'''
>>> d = dict([re.split('=\w*', line, 1) for line in text.split('\n') if line])
>>> d
{'Country': 'NORWAY',
'Lat': '70.9',
'Long': '8.7',
'Name': 'Jan Mayen',
'Number': '010010'}
>>> d['Long']
'8.7'