регулярное выражение 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 re raw pattern
  • Re.match () возвращает всегда none
  • Вопрос Python re.sub
  • Python Regular Expression Match Все 5 цифр, но не больше
  • Разбор строки для вложенных паттернов
  • Определение непревзойденной части строки с использованием регулярного выражения в Python
  • Состояние модуля Python - сохранение состояния?
  • Регулярное выражение с повторяющимися группами
  •  
    Interesting Posts for Van-Lav

    Google App Engine – большой запрос – Python не может найти библиотеки google.cloud

    Добавить и сохранить объекты на parse.com db из django

    Как «двоичные» числа относятся к моему повседневному программированию?

    Ошибка в Sci-Kit Узнать SGD Algo – «Массив содержит NaN или бесконечность»

    Поиск LDAP с именем пользователя как переменной

    Использование старой версии numpy даже при установленной более новой версии

    добавление пути к файлу sys.path в python

    В чем разница между аутентификацией и логином?

    Роль, определенная для функции, не может быть определена Лямбдой

    Django получает количество фотографий в галерее рядом с названием галереи

    Модуль подпроцесса Python возвращает разные результаты из оболочки Unix

    py.test: ImportError: нет модуля с именем mysql

    Как подсчитать уникальные значения внутри массива в Python?

    "ПРЕДУПРЕЖДЕНИЕ conda.gateways.disk: exp_backoff_fn (47): Неисправность с ошибкой 41" во время "установки конда"

    подмножества для кортежа

    Python - лучший язык программирования в мире.