3

假设有一个字符串 s,它看起来像这样:

s = 'Title: A title Date: November 23 1234 Other: Other information'

是否可以创建一个字典,它将是:

{'Title':'A title','Date':'November 23 1234','Other':'Other information'}

起初我想只是将它拆分到冒号所在的位置,但后来,不知道 Title 的值可能是什么,标题本身可能有冒号。唉,这个信息的来源也没有用逗号分隔,所以这也是一种痛苦。EG,你怎么能这样做:

s = 'Title: Example: of a title Date: November 23 1234 Other: Other information'

该示例中的标题为Example: of a title.

我已经检查了这个问题,但它没有回答我的问题。

提前致谢。

4

3 回答 3

3
import re
from itertools import izip

s = 'Title: Example: of a title Date: November 23 1234 Other: Other information'

keys = ['Title', 'Date', 'Other']
pattern = re.compile('({})\s+'.format(':|'.join(keys)))

print dict(izip(*[(i.strip() for i in (pattern.split(s)) if i)]*2))

出去:

{'Date:': 'November 23 1234 ',
 'Other:': 'Other information',
 'Title:': 'Example: of a title '}
于 2013-03-18T07:29:35.857 回答
1

你可以用正则表达式来做到这一点:

>>> import re
>>> 
>>> s = 'Title: A title Date: November 23 1234 Other: Other information'
>>> matches = re.findall(r'(\w+): ((?:\w+\s)+)', s)
>>> 
>>> dict(matches)
    {'Date': 'November 23 1234 ', 'Other': 'Other ', 'Title': 'A title '}
于 2013-03-18T07:05:52.343 回答
0

你不能只用冒号分割它,因为它们有多个(可能是嵌套的)。

如果关键字(Title, Date, Other)是固定的,您可以尝试以下正则表达式:

import re
reg_ex = re.compile("Title\:(.+)Date\:(.+)Other\:(.+)")
reg_ex.match(s).groups() #(' A title ', ' November 23 1234 ', ' Other information')
于 2013-03-18T07:21:59.133 回答