#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] "
.