regex Python中的重复正则表达式

qfe3c7zg  于 2022-11-18  发布在  Python
关注(0)|答案(2)|浏览(161)

我需要解析类似以下内容的行:

'''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 {(([^=]+?)=(.+?),?)+}”也不起作用。
所以问题是如何按顺序重复上面的操作?问题是如果值中包含引号、符号或数字,我就不这样做。
谢谢你

vs91vp4v

vs91vp4v1#

你可能会以一种更容易的方式面对这个问题。

sentence = '''Object{identifier='d6e461c5-fd55-42cb-b3e8-40072670fd0f', name='some_name2', identifier='d6e461c5-fd55-42cb-b3e8-40072670fd0f', name='some_name3', value=value_without_quotes}'''
listing = [couple.split("=") for couple in sentence.split(",")]

使列表扁平化

listing = [y for x in listing for y in x]

您将获得类似于以下内容的内容:

['Object{identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", ' name', "'some_name2'", ' identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", ' name', "'some_name3'", ' value', 'value_without_quotes}']

您刚刚对strip()执行的操作,并删除“Object{”和“}”

result = [x.strip().replace("Object{", "").replace("}","") for x in listing]

最终的结果是:

['identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", 'name', "'some_name2'", 'identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", 'name', "'some_name3'", 'value', 'value_without_quotes']
xlpyo6sf

xlpyo6sf2#

line3 = '''Object{identifier='d6e461c5-fd55-42cb-b3e8-40072670fd0f', name='some_name2', identifier='d6e461c5-fd55-42cb-b3e8-40072670fd0f', name='some_name3', value=value_without_quotes}'''

pattern = r'[{\s](.+?)=(.+?)[}\s,]'
match = re.findall(pattern, line3)
[item for key_value_pair in match for item in key_value_pair]

输出
['identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", 'name', "'some_name2'", 'identifier', "'d6e461c5-fd55-42cb-b3e8-40072670fd0f'", 'name', "'some_name3'", 'value', 'value_without_quotes']

相关问题