使用正则表达式在python中标记字符串

时间:2013-05-31 22:08:17

标签: python regex tokenize

我输入的格式如下,不是由我决定的

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

1 个答案:

答案 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