2016-02-19 2 views
-1

У меня есть код ниже, который работает нормально, но когда моя строка «hello I am in 12th grade but i am 230 years old», я получаю 12, 230, но хочу 12230 как одно целое. Как мне это достичь?Извлечь целые числа в строку python re.findall

import re 

def main(): 
    str1 = 'ABCD12' 
    str1 = input("Enter a String: ") 
    str1 = "3158 reviews" 
    person = re.findall('\d+', str1) 
    if person: 
     print(person) 
    else: 
     print("0") 

main() 
+0

Вы можете просто лишить всех не числовые? 'person = re.sub ('[^ 0-9]', '', str1)' – miradulo

+0

Вы должны принять ответ, который был вам наиболее полезен –

ответ

4

Использование str.join, вы можете объединить несколько строк в одну строку:

>>> import re 
>>> re.findall(r'\d+', "hello I am in 12th grade but i am 230 years old") 
['12', '230'] 
>>> ''.join(re.findall(r'\d+', "hello I am in 12th grade but i am 230 years old")) 
'12230' 

Кстати, вместо того чтобы использовать регулярные выражения, вы можете использовать filter с str.isdigit:


ОБНОВЛЕНИЕ

Как прокомментировал Donkey Kong, вы можете также использовать re.sub удалить нецифровые символы:

>>> re.sub(r'\D+', '', "hello I am in 12th grade but i am 230 years old") 
'12230' 

Но, с этим вы не можете проверить, есть ли цифра или нет.

0

Я не понимаю, что вы намеревались сделать, вручную присваивая значения str1 после ввода пользователем ввода.

import re 

def main(): 
    str1 = input("Enter a String: ") 
    person = re.findall('\d+', str1) 
    print(''.join(person) if person else '0') 

main() 
0

версия Vanilla:

def main(): 
    str1 = 'ABCD12' 
    str1 = input("Enter a String: ") 
    str1 = "3158 reviews" 
    person = ''.join(filter(str.isdigit, str1)) 
    if person: 
     print(person) 
    else: 
     print("0") 

main() 
Смежные вопросы