Регулярные выражения - выделение целых чисел из строки

Дана строка, необходимо вывести все целые числа через запятую

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
→ Ссылка