0

我在 Python 中有一个字符串

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

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

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

谢谢。

4

4 回答 4

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'}
于 2013-07-12T01:19:48.947 回答
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'}
>>> 
于 2013-07-12T01:26:49.407 回答
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')]
于 2013-07-12T01:29:10.920 回答
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
于 2013-07-12T01:33:25.310 回答