python - 在 Python 中解析 TCL 列表

标签 python regex parsing tcl

我需要在双括号上拆分以空格分隔的 TCL 列表...例如...

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}}}"""

这应该解析为...

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}}}"""]

我试过...

import re
splitter = re.compile('}}\s+{{')
splitter.split(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}}}']

我不知道如何只在 }} {{ 之间的空格上拆分。我知道我可以作弊并手动插入缺失的大括号,但我宁愿找到一种简单的方法来有效地解析它。

有没有一种方法可以使用 re.split(或其他一些 python 解析框架)来解析 OUTPUT 以获取任意数量的包含 { 的以空格分隔的行{内容在这里}}?

最佳答案

自从 comp.lang.python 讨论以来,Pyparsing 有了改进,我认为即使是 Cameron Laird 也不会提示使用 pyparsing 的 nestedExpr 方法的解决方案:

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 的原始嵌套列表输出可能会有更好的帮助(请注意,即使引用字符串在列表中,引用的项目保留为它自己的项目)。但是,如果您真的非常想要包含嵌套大括号的字符串,请使用 nestedBraces2 中显示的带有 originalTextFor 的形式。

关于python - 在 Python 中解析 TCL 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439124/

相关文章:

python - Swift vDSP rFFT 与 Python np.fft.rfft() 不同

python - 为什么在某些情况下使用 NLTK 提取单词会截断最后的 'S'?

regex - Emacs:replace-regexp 替换不改变大小写

c# - 简单的正则表达式在 c# 中不起作用

java - Java 中 JSON 数组字符串到 JSONArray 对象

python - Keras:如何获得预测类的置信度?

python - 使用 selenium get_attribute 扭曲 HTML 内容

regex - 使用前瞻在正则表达式上拆分

用 C 创建一个简单的配置文件和解析器

parsing - 如何使用 NLP 解析食谱成分?