регулярное выражение python: получить конечные цифры из строки

Я довольно новичок в python и regex (новичок здесь regex), и у меня есть следующая простая строка:

s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716""" 

Я хотел бы извлечь только последние цифры в приведенной выше строке, то есть 767980716, и мне было интересно, как я мог бы это сделать, используя регулярное выражение python.

Я хотел сделать что-то похожее:

 re.compile(r"""-(.*?)""").search(str(s)).group(1) 

что я хочу найти материал между ними (. *?), который начинается с «-» и заканчивается в конце строки, но это ничего не возвращает.

Мне было интересно, может ли кто-нибудь указать мне в правильном направлении. Спасибо.

7 Solutions collect form web for “регулярное выражение python: получить конечные цифры из строки”

Вы можете использовать re.match для поиска только символов:

 >>> import re >>> s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716""" >>> re.match('.*?([0-9]+)$', s).group(1) '767980716' 

Кроме того, re.finditer работает так же хорошо:

 >>> next(re.finditer(r'\d+$', s)).group(0) '767980716' 

Объяснение всех компонентов регулярного выражения:

  • .*? является не жадным сочетанием и потребляет только как можно больше (жадный матч будет потреблять все, кроме последней цифры).
  • [0-9] и \d – два разных способа записи цифр. Обратите внимание, что последний также соответствует цифрам в других схемах написания , таких как ୪ или 2.
  • Скобки ( () ) делают содержимое выражения группой, которую можно получить с помощью group(1) (или 2 для второй группы, 0 для всего матча).
  • + означает несколько записей (по крайней мере, одно число в конце).
  • $ соответствует только концу ввода.

Хороший и простой с findall :

 import re s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716""" print re.findall('^.*-([0-9]+)$',s) >>> ['767980716'] 

Регулярное выражение Пояснение:

 ^ # Match the start of the string .* # Followed by anthing - # Upto the last hyphen ([0-9]+) # Capture the digits after the hyphen $ # Upto the end of the string 

Или просто просто сопоставить цифры, следующие в конце строки '([0-9]+)$'

Используйте следующее регулярное выражение

 \d+$ 

$ изображает конец строки.

\d – это цифра

+ совпадает с предыдущим символом 1 много раз

Ваше Regex должно быть (\d+)$ .

  • \d+ используется для сопоставления цифр (один или несколько)
  • $ используется для соответствия в конце строки.

Итак, ваш код должен быть: –

 >>> s = "99-my-name-is-John-Smith-6376827-%^-1-2-767980716" >>> import re >>> re.compile(r'(\d+)$').search(s).group(1) '767980716' 

И здесь вам не нужно использовать функцию str , так как s уже является строкой.

Попробуйте вместо этого использовать \d+$ . Это соответствует одному или нескольким числовым символам, за которыми следует конец строки.

Соответствуют ли длина строк или даже количество цифр в конце? Если это так, вы можете просто отрезать последнее n число цифр без использования регулярного выражения, которое будет работать более эффективно, я бы предположил

Сохраните регулярные выражения для чего-то, что требует более тяжелого подъема.

 >>> def parse_last_digits(line): return line.split('-')[-1] >>> s = parse_last_digits(r"99-my-name-is-John-Smith-6376827-%^-1-2-767980716") >>> s '767980716' 
  • python regex, формат даты
  • Удалить запятые в строке, в окружении запятой и двойными кавычками / Python
  • Python re.findall с groupdicts
  • Прямая косая черта в регулярном выражении Python
  • Выражение до комментария или конца строки
  • Python Regex - найти содержимое из строки между двумя '*'
  • Разница между re.search () и re.findall ()
  • Python - регулярное выражение для соответствия url с идентификатором объекта mongo
  • регулярное выражение python "\ 1"
  • Частичное совпадение Python Regex или "hitEnd"
  • Соответствие регулярного выражения Python в условных выражениях
  • Python - лучший язык программирования в мире.