我输入的格式如下,不是由我决定的
key1: value1 key2: value2 key3: value3 key4 { key11: val11 key22: value22 } key5: value5 ............
输入字符串的键值由冒号或括号括起来。
我想将它标记化,我有以下想法:
首先要使用正则表达式解析数据,直到找到:
或{
优先于{
而不是:
然后拆分并读取,直到我说的白色空间图案到达并递归遍历整个字符串
我想知道我是否可以编写像(some_string)这样的正则表达式(特殊字符模式)
(特殊字符模式可以是:
或{
,优先于{
)(字符串的其余部分)
如果它是:
,那么对于其余的字符串,从'value1'获取字符串部分并捕获它。处理剩余的字符串
如果是{
,则遍历直至找到}
并在内部使用上面定义的:
逻辑。
例如
a: 1 b: 2 c { d: 3 e: 4 } f: 5
这应该给出
a:1
b:2
c { d: 3 e: 4 }
f: 5
答案 0 :(得分:4)
您可以使用此模式:
[^ ]+(?:: [^ ]+| \{[^}]+\})
示例:
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