如何使用Python重新将此字符串解析为多个键值对的列表?

时间:2013-07-12 01:16:14

标签: python regex

我有一个Python字符串

str1 = 'abc(1),bcd(xxx),ddd(dfk dsaf)'

如何使用re将其解析为一个对象,然后说“结果”,这样我就可以执行以下操作:

for k,v in results:
   print('key = %r, value = %r', (k, v)) 

感谢。

4 个答案:

答案 0 :(得分:2)

这样的事情,使用re.findall

>>> str1 = 'abc(1),bcd(xxx),ddd(dfk dsaf)'
>>> results = re.findall(r'(\w+)\(([^)]+)\),?',str1)
for k,v in results:
    print('key = %r, value = %r' % (k, v))
...     
key = 'abc', value = '1'
key = 'bcd', value = 'xxx'
key = 'ddd', value = 'dfk dsaf'

如果你想要一个字典,请将它传递给dict()

>>> dict(results)
{'bcd': 'xxx', 'abc': '1', 'ddd': 'dfk dsaf'}

答案 1 :(得分:1)

您还可以使用finditer

>>> p = re.compile(r'(\w+)\((.*?)\)')
>>> {x.group(1):x.group(2) for x in p.finditer(str1)}
{'bcd': 'xxx', 'abc': '1', 'ddd': 'dfk dsaf'}
>>> 

答案 2 :(得分:0)

你可以在紧张的情况下不依靠正则表达式来实现它

 str1 = 'abc(1),bcd(xxx),ddd(dfk dsaf)'
 results = [x.split('(') for x in str1.split(',')]
 results = [(x, y.rstrip(')')) for x, y in results]
 print results
 [('abc', '1'), ('bcd', 'xxx'), ('ddd', 'dfk dsaf')]

答案 3 :(得分:0)

str1 = 'abc(1),bcd(xxx),ddd(dfk dsaf)'

import re
d = dict(re.findall('(\w+)\((.*?)\)', str1))
# {'bcd': 'xxx', 'abc': '1', 'ddd': 'dfk dsaf'}

for k,v in d.iteritems():
    # do whatever