は最も簡単にはpyparsing
(pip install pyparsing
)のように、適切なパーサで次のようになります。
from pyparsing import *
text = 'Specialty: "Neurology: Neurology, NeuroScience", Profession: Nurse Practitioner, Source: TestSource'
word = Word(alphas)
key = word + Suppress(':')
words = Combine(word + ZeroOrMore(" " + word))
value = (QuotedString('"')^words) + Optional(Suppress(', '))
dictionary = dictOf(key, value)
print dictionary.parseString(text).asDict()
# => {'Source': 'TestSource', 'Profession': 'Nurse Practitioner', 'Specialty': 'Neurology: Neurology, NeuroScience'}
我々は一連のword
を定義する文法を定義します文字であるkey
の後にコロンが続きます(考慮しません)。words
は、単語がスペースで区切られた単語を多く含む可能性があります。value
単語や二重引用符で囲まれた文字列(おそらくカンマで終わっていないもの)と、dictionary
をキーと値のペアのリストとして指定します。それからパーサーにそのことをさせてください。
EDIT: `:しかし、あなたが本当に正規表現のソリューションをしたい場合、私は推測する...
print {m[0]: m[1] or m[2]
for m in re.findall(r'([^,:\s]+): (?:"([^"]*)"|([^,]+))', text)}
正規表現を使用して迅速かつ効率的な応答をありがとう。あなたが書いたことを理解できるようにタグを付けることができる参考文献はありますか? –
答えに説明するのはちょっと複雑です。 https://regex101.com/r/zIPZcE/2は、右側に色分けされた素敵な内訳を表示します。 – Amadan