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

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

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

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

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

Я хотел сделать что-то подобное по строкам:

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

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

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

4b9b3361

Ответ 1

Вы можете использовать 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'

Объяснение всех компонентов regexp:

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

Ответ 2

Приятно и просто с findall:

import re

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

print re.findall('^.*-([0-9]+)$',s)

>>> ['767980716']

Regex Пояснение:

^         # 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]+)$'

Ответ 3

Ваш 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 уже является строкой.

Ответ 4

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

\d+$

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

\d - это цифра

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

Ответ 5

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

Ответ 6

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

>>> 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'