Подтвердить что ты не робот

Python - проверить, являются ли последние символы в строке номерами

В принципе, я хочу знать, как я это сделаю.

Вот пример строки:

string = "hello123"

Я хотел бы знать, как бы проверить, заканчивается ли строка числом, а затем напечатать номер, в котором заканчивается строка.

Я знаю, что для этой определенной строки вы можете использовать регулярное выражение, чтобы определить, заканчивается ли оно числом, а затем используйте строку [:], чтобы выбрать "123". НО, если я прокручиваю файл с такими строками:

hello123
hello12324
hello12435436346

... Тогда я не смогу выбрать номер, используя строку [:] из-за дифференциации в длинах чисел. Надеюсь, я объяснил, что мне нужно достаточно ясно, чтобы вы, ребята, помогли. Спасибо!

4b9b3361

Ответ 1

import re
m = re.search(r'\d+$', string)
# if the string ends in digits m will be a Match object, or None otherwise.
if m is not None:
    print m.group()

\d соответствует числовой цифре, \d+ означает соответствие одному или нескольким цифрам (жадные: сопоставляйте как можно больше последовательных последовательностей). И $ означает соответствие конца строки.

Ответ 2

Это не учитывает ничего в середине строки, но в основном говорит, что если последнее число является цифрой, оно заканчивается номером.

In [4]: s = "hello123"

In [5]: s[-1].isdigit()
Out[5]: True

С несколькими строками:

In [7]: for s in ['hello12324', 'hello', 'hello1345252525', 'goodbye']:
   ...:     print s, s[-1].isdigit()
   ...:     
hello12324 True
hello False
hello1345252525 True
goodbye False

Я полностью и полностью поддерживаю решение регулярных выражений, но вот один (не очень) способ получить номер. Опять же, регулярное выражение здесь намного лучше:)

In [43]: from itertools import takewhile

In [44]: s = '12hello123558'

In [45]: r = s[-1::-1]

In [46]: d = [c.isdigit() for c in r]

In [47]: ''.join((i[0] for i in takewhile(lambda (x, y): y, zip(r, d))))[-1::-1]
Out[47]: '123558'

Ответ 3

Этот будет просто возвращать пустую строку, если строка заканчивается чем-то, что не является числом.

import re
re.split('[^\d]', str)[-1]

Поскольку пустая строка является ложной, вы можете перегрузить значение:

def getNumericTail(str):
    re.split('[^\d]', str)[-1]

def endsWithNumber(str):
    bool(getNumericTail(str))

Ответ 4

другое решение:

a = "abc1323"
b = ""
for c in a[::-1]:
    try:
        b += str(int(c))
    except: 
        break

print b[::-1]

Ответ 5

Другое решение: посмотрите, сколько цифр 0-9 вы можете разбить конец строки и использовать эту длину в качестве индекса в строку для разделения числа. (Возвращает '', если строка не заканчивается числом).

In [1]: s = '12hello123558'

In [2]: s[len(s.rstrip('0123456789')):]
Out[2]: '123558'