如何从字符串中提取多个值

时间:2014-07-08 23:26:31

标签: python regex string

我有一个很长的Python列表,如:

['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2']

我想从此列表中获取包含pnSNR值的元组列表。

所以:

funz(['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2'])

将返回:

[(45,200,12), (2232,22,2)]

列表中的字符串具有完全相同的结构。

3 个答案:

答案 0 :(得分:2)

另一种选择是:

def funz(l):
    return [tuple(int(i.split('=')[1]) for i in item.split(' ')[1:]) for item in l]

编辑了@ bvukelic的评论。

答案 1 :(得分:0)

import re

data =  ['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2']

result = []

for x in data:
    result.append( map( int, re.search('p=(\d+).*n=(\d+).*SNR=(\d+)', x).groups()) )

print result

[[45, 200, 12], [2232, 22, 2]]

答案 2 :(得分:0)

您可以使用re.findalllist comprehension

>>> from re import findall
>>> lst = ['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2']
>>> def funz(lst):
...     return [tuple(map(int, findall("\d+", i))) for i in lst]
...
>>> funz(['A p=45 n=200 SNR=12', 'B p=2232 n=22 SNR=2'])
[(45, 200, 12), (2232, 22, 2)]
>>>

正则表达式模式\d+匹配一个或多个数字。