Python - проверить, являются ли последние символы в строке номерами
В принципе, я хочу знать, как я это сделаю.
Вот пример строки:
string = "hello123"
Я хотел бы знать, как бы проверить, заканчивается ли строка числом, а затем напечатать номер, в котором заканчивается строка.
Я знаю, что для этой определенной строки вы можете использовать регулярное выражение, чтобы определить, заканчивается ли оно числом, а затем используйте строку [:], чтобы выбрать "123". НО, если я прокручиваю файл с такими строками:
hello123
hello12324
hello12435436346
... Тогда я не смогу выбрать номер, используя строку [:] из-за дифференциации в длинах чисел. Надеюсь, я объяснил, что мне нужно достаточно ясно, чтобы вы, ребята, помогли. Спасибо!
Ответы
Ответ 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'