python regex: get end digits from a string

You can use re.match to find only the characters:

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

Alternatively, re.finditer works just as well:

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

Explanation of all regexp components:

  • .*? is a non-greedy match and consumes only as much as possible (a greedy match would consume everything except for the last digit).
  • [0-9] and \d are two different ways of capturing digits. Note that the latter also matches digits in other writing schemes, like ୪ or ൨.
  • Parentheses (()) make the content of the expression a group, which can be retrieved with group(1) (or 2 for the second group, 0 for the whole match).
  • + means multiple entries (at least one number at the end).
  • $ matches only the end of the input.

Your Regex should be (\d+)$.

  • \d+ is used to match digit (one or more)
  • $ is used to match at the end of string.

So, your code should be: -

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

And you don't need to use str function here, as s is already a string.


Use the below regex

\d+$

$ depicts the end of string..

\d is a digit

+ matches the preceding character 1 to many times


Nice and simple with findall:

import re

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

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

>>> ['767980716']

Regex Explanation:

^         # 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

Or more simply just match the digits followed at the end of the string '([0-9]+)$'

Tags:

Python

Regex