import re
from io import StringIO
field_pattern = re.compile(r'(?<=(?<!\S)\{)[^}]*(?=\}(?!\S))|(?<!\S)(?!\{)\S+(?!\S)')
file = StringIO('''\
commit file before after
{./SonarSource-sonarqube/592397657f44ebb8869159e86087fa62f2c64dd0} {QGChangeEventListenersImplTest.java} 0.2554725331856924 0.25835876057253165
{./SonarSource-sonarqube/51ae2098d531a72c7a7136a4da1063fe05a2bc0e} {SearchAction.java} 0.6027389261871576 0.5584944983323415
{./SonarSource-sonarqube/22600d84f370f18b3050e2e06eec9d9975117487} {IssueQueryTest.java} 0.2875728372794886 0.2879662721728285
''')
next(file)
for fields in map(field_pattern.findall, file):
print(fields)
aW1wb3J0IHJlCmZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCgpmaWVsZF9wYXR0ZXJuID0gcmUuY29tcGlsZShyJyg/PD0oPzwhXFMpXHspW159XSooPz1cfSg/IVxTKSl8KD88IVxTKSg/IVx7KVxTKyg/IVxTKScpCmZpbGUgPSBTdHJpbmdJTygnJydcCmNvbW1pdCBmaWxlIGJlZm9yZSBhZnRlcgp7Li9Tb25hclNvdXJjZS1zb25hcnF1YmUvNTkyMzk3NjU3ZjQ0ZWJiODg2OTE1OWU4NjA4N2ZhNjJmMmM2NGRkMH0ge1FHQ2hhbmdlRXZlbnRMaXN0ZW5lcnNJbXBsVGVzdC5qYXZhfSAwLjI1NTQ3MjUzMzE4NTY5MjQgMC4yNTgzNTg3NjA1NzI1MzE2NQp7Li9Tb25hclNvdXJjZS1zb25hcnF1YmUvNTFhZTIwOThkNTMxYTcyYzdhNzEzNmE0ZGExMDYzZmUwNWEyYmMwZX0ge1NlYXJjaEFjdGlvbi5qYXZhfSAwLjYwMjczODkyNjE4NzE1NzYgMC41NTg0OTQ0OTgzMzIzNDE1CnsuL1NvbmFyU291cmNlLXNvbmFycXViZS8yMjYwMGQ4NGYzNzBmMThiMzA1MGUyZTA2ZWVjOWQ5OTc1MTE3NDg3fSB7SXNzdWVRdWVyeVRlc3QuamF2YX0gMC4yODc1NzI4MzcyNzk0ODg2IDAuMjg3OTY2MjcyMTcyODI4NQonJycpCm5leHQoZmlsZSkKZm9yIGZpZWxkcyBpbiBtYXAoZmllbGRfcGF0dGVybi5maW5kYWxsLCBmaWxlKToKICAgIHByaW50KGZpZWxkcyk=
['./SonarSource-sonarqube/592397657f44ebb8869159e86087fa62f2c64dd0', 'QGChangeEventListenersImplTest.java', '0.2554725331856924', '0.25835876057253165']
['./SonarSource-sonarqube/51ae2098d531a72c7a7136a4da1063fe05a2bc0e', 'SearchAction.java', '0.6027389261871576', '0.5584944983323415']
['./SonarSource-sonarqube/22600d84f370f18b3050e2e06eec9d9975117487', 'IssueQueryTest.java', '0.2875728372794886', '0.2879662721728285']