Если искомое число всегда находится в конце строки, вы можете получить его с помощью регулярного выражения такого типа: ([0-9]+)[^0-9]*$
Пример программы:
import re
print re.search(r'([0-9]+)[^0-9]*$','abd-256PA\r\n20db').group(1)
Примервывод:
20
Тестовая программа:
import re
str = ['abd-256PA\r\n20db',
'abc-256\r\n0db',
'abc-256aa0db',
'uio1289248282dasd1786ddass',
'12',
'2101a123aasdqwqwe']
for x in str:
print '"%s" >> "%s"' %(x, re.search(r'([0-9]+)[^0-9]*$',x).group(1))
Тестовый вывод:
"abd-256PA
20db" >> "20"
"abc-256
0db" >> "0"
"abc-256aa0db" >> "0"
"uio1289248282dasd1786ddass" >> "1786"
"12" >> "12"
"2101a123aasdqwqwe" >> "123"
Объяснение по запросу:
Python имеет модуль регулярных выражений re с функцией search , которая пытается найти совпадение с регулярным выражением в данной строке.
По сути, это ([0-9]+)[^0-9]*$
означает:
[0-9]
любое число от 0 до 9 [0-9]+
1 или более вхождение любого числаот 0 до 9 [^0-9]
любой символ, НО цифры от 0 до 9 [^0-9]*
последовательность из 0 или более символов, где нет цифр от 0 до 9 $
конец строки (...)
группа захвата, материал, который мы пытаемся найти ([0-9]+)[^0-9]*$
последовательность из 1 или более чисел, за которыми следует 0 или более не-numbers, за которыми следует конец строки
Функция re.search принимает 2 параметра: регулярное выражение и строку, в которой нужно искать это регулярное выражение.И он возвращает объект типа MatchObject .В основном group(1)
означает «дай мне первую захваченную группу» (ту, что в (...)
).