Pyparsing улучшился после обсуждения comp.lang.python, и я думаю, что даже Кэмерон Лэйрд не будет жаловаться на решение, использующее метод nestedExpr
pyparsing:
OUTPUT = """{{172.25.50.10:01:01-Ethernet 172.25.50.10:01:02-Ethernet {Traffic Item 1}}} {{172.25.50.10:01:02-Ethernet 172.25.50.10:01:01-Ethernet {Traffic "Item 1"}}}"""
from pyparsing import nestedExpr, originalTextFor
nestedBraces1 = nestedExpr('{', '}')
for nb in nestedBraces1.searchString(OUTPUT):
print nb
nestedBraces2 = originalTextFor(nestedExpr('{', '}'))
for nb in nestedBraces2.searchString(OUTPUT):
print nb
Печать:
[[['172.25.50.10:01:01-Ethernet', '172.25.50.10:01:02-Ethernet', ['Traffic', 'Item', '1']]]]
[[['172.25.50.10:01:02-Ethernet', '172.25.50.10:01:01-Ethernet', ['Traffic', '"Item 1"']]]]
['{{172.25.50.10:01:01-Ethernet 172.25.50.10:01:02-Ethernet {Traffic Item 1}}}']
['{{172.25.50.10:01:02-Ethernet 172.25.50.10:01:01-Ethernet {Traffic "Item 1"}}}']
Если вам нужно будет повторно разделить данные, чтобы получить отдельные элементы из вложенных фигурных скобок, то исходный вложенный список, выведенный из nestedExpr
, может быть лучше цитируемый элемент сохраняется как отдельный элемент). Но если вы действительно хотите эту строку, содержащую вложенные фигурные скобки, тогда используйте форму с originalTextFor
, показанную в nestedBraces2
.