Как использовать re.findall в python

Вот моя программа:

import re
string = "I have 56 apples, Tom has 34 apples, Mary has 222 apples"

apple = re.findall(r'\d{1,100}', string)
print (apple)

И результат:

['56', '34', '222']

Я хочу назвать три числа выше, чтобы я мог сделать некоторые вычисления. Я также хочу назвать первый результат a, второй b, третий c, А потом рассчитать a+b или же a+c, что-то вроде того. Может ли кто-нибудь сказать мне, как это сделать.

Если re.findall не могу решить мое дело здесь, есть ли другой способ достичь этой цели?

3 ответа

Решение

Если вы хотите, вы можете использовать назначение кортежей на LHS:

a,b,c = re.findall(r'\d{1,100}', string)

Это эквивалентно написанию (a,b,c) = ...; вам больше не нужно ставить круглые скобки вокруг кортежа, если он находится в LHS задания.

Это плохой стиль кодирования, как сказал @SterlingArcher, потому что если вы не получите ровно три элемента, или если ваша строка была плохой, или регулярное выражение не удалось, вы получите ошибку.

Одна тактика - использовать трейлинг _ в качестве переменной безразличия, чтобы впитать любые дополнительные элементы: a,b,c,_ = ... Но это все равно сломается, если ваша строка или регулярное выражение не дадут хотя бы три элемента.

Есть более простой способ, с простой проверкой цикла.

string = "I have 56 apples, Tom has 34 apples, Mary has 222 apples"
x = [int(num) for num in string.split() if num.isdigit()]

>>> x
[56, 34, 222]

Это разделит строку и проверит, является ли это число, и вернет его в список. Если вы хотите, чтобы эти числа были в строке для (я не понимаю, почему, если это число, пусть это будет число), то удалите int() Кастинг.

Проблема с вашим вопросом заключается в том, что если вы хотите присвоить эти проанализированные числа переменным, вам придется делать это вручную, что плохо. Если в итоге вы получите динамическое число возвращаемых чисел, это будет невероятно утомительно и потенциально ненадежно. Вы можете пересмотреть логику здесь.

Это решение может не помочь конкретной проблеме с re.findall, но это решение позволит вам выполнить необходимые расчеты. Используй словарь:

>>>applesDict = {"My apples": 56, "Tom apples": 34, "Mary apples":222}

Теперь вы можете хранить и решать любые расчеты.

>>>c = applesDict["My apples"]
>>>d = applesDict["Tom apples"]

print c + d
>>> 90

Этот код может быть не таким эффективным, но простым для понимания и дает то, что вам нужно сделать.

Другие вопросы по тегам