преобразование созданного числа соединения в int

#python #join

#python #Присоединиться

Вопрос:

Пример:

 import re
rx = re.compile("{0-9}")
Var1 =bla bla bla 54467
Var2= rx.findall(Var1)
number = ''.join(Var2)
  

Мой вопрос в том, как преобразовать числовую переменную в int, я пытаюсь сделать это с помощью int(), но я получаю сообщение об ошибке.
Или есть способ создать такую переменную, как int, с помощью другого метода?

Ответ №1:

Не используйте для этого регулярные выражения. filter() является ли uch проще и быстрее:

 >>> s = "bla bla bla 54467 bla"
>>> int(filter(str.isdigit, s))
54467
  

Приведенный выше код объединит все числа в строке в одну строку. Если вы этого не хотите, используйте

 >>> s = "bla 1223 bla 54467 bla"
>>> map(int, filter(str.isdigit, s.split()))
[1223, 54467]
  

Те же рецепты, адаптированные для Python 3.x:

 >>> s = "bla bla bla 54467 bla"
>>> int("".join(filter(str.isdigit, s)))
54467
>>> s = "bla 1223 bla 54467 bla"
>>> list(map(int, filter(str.isdigit, s.split())))
[1223, 54467]
  

Комментарии:

1. функция map дает мне другой вывод, не такой, как у вас здесь. это дает мне такой результат: <объект карты в 0x1beb250>. я хочу получить результат, который у вас есть здесь, как?

2. и int(), как вы его здесь пишете, тоже не работает, он выдает мне сообщение об ошибке, что ему не нравится конвертировать filter .

3. @HananN.: Мое решение предназначено для Python 2.x. Вы не сказали, что используете Python 3.x, и 95% пользователей все еще используют 2.x.

4. Обновил мой ответ вариантами 3.x.

Ответ №2:

Ваше регулярное выражение неверно. Работает следующее:

 import re
rx = re.compile("[0-9]") # note the change
Var1 ='bla bla bla 54467 bla'
Var2= rx.findall(Var1)
number = int(''.join(Var2))
print number
  

Обратите внимание, что приведенный выше код найдет все цифры внутри строки, независимо от того, являются ли они последовательными, и объединит их в одно число. Чтобы получить группы последовательных цифр, измените свое регулярное выражение на "[0-9] " .