python - 在python中拆分大括号分组的字符串

标签 python string split

感谢单行成语中的帮助,以有效地执行以下操作。

我有一个由大括号分隔的组的字符串,如下所示:

{1:xxxx}{2:xxxx}{3:{10:xxxx}}{4:xxxx\r\n:xxxx}....  

如何将其转换为字典格式?

dict={1:'xxx',2:'xxxx',3:'{10:xxxx}'},4:'xxxx\r\n:xxxx'}  

最佳答案

r = """(?x)
{
    (\w+)
    :
    (
        (?:
            [^{}]
            |
            {.+?}
        )+
    )
}
"""

z = "{1:xxxx}{2:xxxx}{3:{10:xxxx}}{4:'xxxx'}"
print dict(re.findall(r, z))

# {'1': 'xxxx', '3': '{10:xxxx}', '2': 'xxxx', '4': "'xxxx'"}

如果您愿意,可以随意转换为单行代码 - 只需从正则表达式中删除 (?x) 和所有空格。

上面只解析了一层嵌套,要处理任意深度请考虑更高级的regex支持递归模式的模块:

import regex

r = """(?x)
{
    (\w+)
    :
    (
        (?:
            [^{}]
            |
            (?R)
        )+
    )
}
"""

z = "{1:abc}{2:{3:{4:foo}}}{5:bar}"
print dict(regex.findall(r, z))

# {'1': 'abc', '2': '{3:{4:foo}}', '5': 'bar'}

关于python - 在python中拆分大括号分组的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356382/

相关文章:

python - 在 asyncio 模块中完成一个任务列表后,如何提交另一个任务列表?

c# - 我可以让字符串表现得像引用类型吗?

python - 如何使用字符或字符串作为放置在操作数之间的运算符?

sql - T-SQL 将字符串拆分为多对一关系?

c# - 一次读取一个字符串,3x3 个字符

python - ctypes,python3.5,OSError : exception: access violation writing 0x00000000

python - 按 dict.values 的数值对字典进行排序

c# - 拆分字符串值并存储在列表中

python - pytz 和 Centos 以及 mysql - django

c - 找到字符串 S 中包含字符串 T 的所有字符的最小窗口