1

私が決めたのではなく、次の形式でデータを入力しました

key1: value1 key2: value2 key3: value3 key4 { key11: val11 key22: value22 } key5: value5 ............

入力文字列には、コロンまたは中かっこで区切られたキー値が含まれます。

私はそれをトークン化したいのですが、次の考えがあります。最初に、:or{が見つかるまでデータを解析する正規表現{を持つ:

次に、私が言った空白パターンに到達するまで分割して読み取り、文字列全体を再帰的にトラバースします

(some_string)(special character pattern) のような正規表現を記述できるかどうかを知りたい (特殊文字パターンは:または{に優先することができます{)(文字列の残りの部分)

残りの文字列の場合は、:' value1 ' から文字列部分を取得してキャプチャします。残りの文字列に取り組む

それが見つかった場合は、上記で定義されたロジックを見つけて内部的に処理{するまでトラバースします。}:

例えば

a: 1 b: 2 c { d: 3 e: 4 } f: 5

これは与えるべきです

a:1
b:2
c { d: 3 e: 4 }
f: 5
4

1 に答える 1

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
于 2013-05-31T22:13:33.577 に答える