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 withgroup(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]+)$'