Регулярные выражения - выделение целых чисел из строки
Дана строка, необходимо вывести все целые числа через запятую
import re
inp = '''ghfjfjfj 5 jfjfkffk 8 jffjkkd 1989
fjhfjddkkd 7 jkdkddldll 8.5 '''
if inp:
textlookfor = r'[0-9]+'
res = re.findall(textlookfor, inp)
print(','.join(res))
аутпут:
5,8,1989,7,8,5
А правильный должен быть без 8 и 5. В общем, мой код засчитывает числа float. Подскажите, пожалуйста, как это можно исправить? На выходе должны быть только целые неотрицательные числа, все остальные должны игнорироваться
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
import re
inp = '''ghfjfjfj 5 jfjfkffk 8 jffjkkd 1989
fjhfjddkkd 7 jkdkddldll 8.5 '''
res = re.findall(r'\b(?<!\.)\d+(?!\.)\b', inp)
print(', '.join(res))
# 5, 8, 1989, 7
Способ через поиск целых и вещественных чисел с последующей фильтрацией:
import re
inp = '''ghfjfjfj 5 jfjfkffk 8 jffjkkd 1989
fjhfjddkkd 7 jkdkddldll 8.5 '''
res = re.findall(r'\b(\d\.\d|\d+)\b', inp)
res = [x for x in res if '.' not in x]
print(', '.join(res))
# 5, 8, 1989, 7