2013-03-22 2 views
0

Я использую re.findall и результат таков:Python: отдельные результаты re.findall

[(u'! mais', u'! - but', u'0.0625')] 

Я хотел бы хранить каждую часть «кортеж» в различных переменных, как

french = u'! mais' 
english = u'! - but' 
prob = u'0.0625' 

, и я также хотел бы преобразовать строку u'0.0625 'в число с плавающей точкой. Любые идеи?

+0

что регулярное выражение, которое вы используете? – isedev

+0

re.findall (r '(. *?) \ S [|] {3} \ s (. *?) \ S [|] {3} \ s [0-9.0-9e \ -0-9] * \ s [0-9.0-9e \ -0-9] * \ с ([0-9.0-9e \ -0-9] *) \ s [0-9.0-9e \ -0-9] * \ s [ 0-9.0-9e \ -0-9] * ', a) –

ответ

1

Если у вас есть только список одного кортежа:

french, english, prob = result[0] 

Если у вас есть несколько кортежей, вы, вероятно, хотите, чтобы петля над ними:

for result in result: 
    french, english, prob = result 
    # do something with this particular french, english, prob 

Но если вы хотите сделать три списки из него, это тоже легко:

frenchies, englishers, probs = zip(*results) 

Eit ее путь, конвертировать prob к поплавку по телефону float:

prob = float(prob) 

Или, если у вас есть список:

probs = map(float, probs) 
+0

Вначале ему лучше было бы использовать названные группы захвата в его регулярном выражении. –

+0

@ sr2222: Это даст ему, фактически, dict с тремя именованными значениями, а не тремя отдельными переменными. Это правда, что если бы мы увидели его код, есть хороший шанс, что дикт был бы полезен или полезнее. Но я не хотел просто _assume_, потому что есть также хороший шанс, что ему действительно нужны три отдельные переменные. – abarnert

+0

Да, это сработало. Спасибо :) –