Как использовать 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
Этот код может быть не таким эффективным, но простым для понимания и дает то, что вам нужно сделать.