我已按照以下格式输入数据,但并非由我决定key1: value1 key2: value2 key3: value3 key4 { key11: val11 key22: value22 } key5: value5 ............输入字符串将具有用冒号或大括号括起来的键值。我想对它进行标记化,我有以下想法:首先要有一个正则表达式来解析数据,直到找到a:或{优先于{over为止。:然后拆分并读取,直到达到我说的空白模式,然后递归遍历整个字符串我想知道是否可以编写正则表达式,例如(some_string)(特殊字符模式)(特殊字符模式可以是:或{优先于{)(字符串的其余部分)如果它是a,:那么对于其余的字符串,请从“ value1”中获取字符串部分并捕获它。处理剩余的字符串如果是{遍历,直到找到}并内部使用:上面定义的逻辑。例如a: 1 b: 2 c { d: 3 e: 4 } f: 5这应该给a:1b:2c { d: 3 e: 4 }f: 5
1 回答

慕仙森
TA贡献1827条经验 获得超8个赞
您可以使用以下模式:
[^ ]+(?:: [^ ]+| \{[^}]+\})
例子:
import re
test = "a: 1 b: 2 c { d: 3 e: 4 } f: 5"
pattern = re.compile(r"[^ ]+(?:: [^ ]+| \{[^}]+\})")
for match in pattern.findall(test):
print match
添加回答
举报
0/150
提交
取消