Регулярное выражение 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)
указывающий, что я хочу найти материал между ними (. *?), который начинается с "-" и заканчивается в конце строки, но это ничего не возвращает.
Мне было интересно, может ли кто-нибудь указать мне в правильном направлении.
Спасибо.
Ответы
Ответ 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'