最簡單的將是一個適當的解析器,像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
作爲鍵和值對的列表。然後我們讓解析器做它的事情。
編輯:但我想,如果你真的想要一個正則表達式的解決方案...
print {m[0]: m[1] or m[2]
for m in re.findall(r'([^,:\s]+): (?:"([^"]*)"|([^,]+))', text)}
感謝您使用正則表達式的快速和高效的響應。有沒有可以標記的參考資料,以便我能理解你寫的內容。 –
在答案中解釋有點複雜; https://regex101.com/r/zIPZcE/2會在右側給你一個很好的顏色編碼細目。 – Amadan