我需要解析类似以下内容的行:
'''Object{identifier='d6e461c5-fd55-42cb-b3e8-40072670fd0f', name='some_name2', identifier='d6e461c5-fd55-42cb-b3e8-40072670fd0f', name='some_name3', value=value_without_quotes}'''
线要长得多,但图案是一样的。
基本上,我需要一个列表(或dict)与键,值。类似:
["'identifier', ''d6e461c5-fd55-42cb-b3e8-40072670fd0f''", "'name', ''some_name2''", "'identifier', ''d6e461c5-fd55-42cb-b3e8-40072670fd0f''", "'name', ''some_name3''", "'value', 'value_without_quotes'"]
下面是一个正则表达式:
r'Object{(+?)=(+?)}'
只有当我只需要一个对象时,它才起作用。
((+?)=(+?),)+
但实际上并没有。例如,
re.match(r'Object{((.+?)=(.+?),?)+}', line3).groups()
给我:
("some_name3', value=value_without_quotes", "some_name3', value", 'value_without_quotes')
正如您所看到的,出现了“value=value_without_quotes”。r“Object {(([^=]+?)=(.+?),?)+}”也不起作用。
所以问题是如何按顺序重复上面的操作?问题是如果值中包含引号、符号或数字,我就不这样做。
谢谢你
2条答案
按热度按时间vs91vp4v1#
你可能会以一种更容易的方式面对这个问题。
使列表扁平化
您将获得类似于以下内容的内容:
您刚刚对
strip()
执行的操作,并删除“Object{”和“}”最终的结果是:
xlpyo6sf2#
输出
['identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", 'name', "'some_name2'", 'identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", 'name', "'some_name3'", 'value', 'value_without_quotes']