如何在 Python 中使用正则表达式将 vcard 文件拆分为单独的联系人?

How to split a vcard file into separate contacts with regex in Python?

出于某种目的,我正在处理 VCF 文件。我在一个 VCF 文件中得到了整个联系人集合。但我想从文件中单独提取每个联系人。我想使用正则表达式来简化它。我怎样才能实现它?

我已经制作了一个模式,但它同时匹配所有联系人。

import re

a = \
'''BEGIN:VCARD
VERSION:3.0
N:-Achham;Bhaskar;Saud;;
FN:Bhaskar -Achham
NOTE:
TEL;TYPE=CELL;TYPE=pref;TYPE=VOICE:9741062727
END:VCARD
BEGIN:VCARD
VERSION:3.0
FN:Rohit Joshi
N:;Rohit Joshi;;;
END:VCARD'''

pattern = 'BEGIN:VCARD.*END:VCARD'
match = re.findall(pattern,a,re.DOTALL)
print(match)

我期待每个联系人的列表,但我得到的结果是这样的。

['BEGIN:VCARD\nVERSION:3.0\nN:-Achham;Bhaskar;Saud;;\nFN:Bhaskar -Achham\nNOTE:\nTEL;TYPE=CELL;TYPE=pref;TYPE=VOICE:9741062727\nEND:VCARD\nBEGIN:VCARD\nVERSION:3.0\nFN:Rohit Joshi\nN:;Rohit Joshi;;;\nEND:VCARD']

您必须修改正则表达式才能进行非贪婪匹配 .*?

pattern = r'(?s)BEGIN:VCARD.*?END:VCARD'

DEMO