擅长:python、mysql、java
<p>最简单的方法是使用适当的解析器,比如<code>pyparsing</code>(<code>pip install pyparsing</code>):</p>
<pre><code>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'}
</code></pre>
<p>我们定义了一种语法,它将<code>word</code>定义为一系列字母,<code>key</code>定义为一个单词后跟一个冒号(我们不考虑这个问题),<code>words</code>定义为一个字符串,该字符串可能由一个单词组成,其中多个单词之间用空格隔开,<code>value</code>定义为单词或一个字符串,该字符串用双引号引起来,可能以逗号结尾(我们不需要),然后作为键和值对列表的<code>dictionary</code>。然后我们让解析器做它的事情。你知道吗</p>
<p>编辑:但我想如果你真的想要一个regexp解决方案。。。你知道吗</p>
<pre><code>print {m[0]: m[1] or m[2]
for m in re.findall(r'([^,:\s]+): (?:"([^"]*)"|([^,]+))', text)}
</code></pre>