Python regex: récupérer les derniers chiffres d'une chaîne de caractères
je suis assez nouveau en python et regex (regex newbie ici), et j'ai la chaîne simple suivante:
s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716"""
je voudrais extraire uniquement les derniers chiffres au-dessus de la chaîne de je.e 767980716 et je me demandais comment je pourrais parvenir à l'aide de python regex.
je voulais faire quelque chose de semblable dans le genre de:
re.compile(r"""-(.*?)""").search(str(s)).group(1)
indiquant que je veux trouver un truc entre les deux (.*?) qui commence avec un "-" et se termine à la fin de la chaîne, mais ce renvoie rien..
je me demandais si quelqu'un pourrait me diriger dans la bonne direction.. Grâce.
6 réponses
Vous pouvez utiliser re.match
pour trouver uniquement les caractères:
>>> import re
>>> s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716"""
>>> re.match('.*?([0-9]+)$', s).group(1)
'767980716'
alternativement,re.finditer
fonctionne tout aussi bien:
>>> next(re.finditer(r'\d+$', s)).group(0)
'767980716'
explication de tous les composants regexp:
.*?
non-gourmand match et consomme seulement autant que possible (un match gourmand consommerait tout sauf le dernier chiffre).[0-9]
et\d
sont deux façons différentes de capture chiffre. A noter que ce dernier aussi correspond à des chiffres dans d'autres schémas d'écriture, comme les pions.- entre Parenthèses (
()
) rendre le contenu de l'expression d'un groupe, qui peut être récupéré avecgroup(1)
(ou 2 pour le deuxième groupe, 0 pour l'ensemble du match). +
signifie entrées multiples (au moins un nombre à la fin).$
ne correspond qu'à la fin de l'entrée.
simple et sympathique avec findall
:
import re
s=r"""99-my-name-is-John-Smith-6376827-%^-1-2-767980716"""
print re.findall('^.*-([0-9]+)$',s)
>>> ['767980716']
Regex Explication:
^ # 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
Ou plus simplement correspondre à la chiffres suivis à la fin de la chaîne'([0-9]+)$'
Regex
doit être (\d+)$
.
\d+
est utilisé pour faire correspondre les chiffres (un ou plusieurs)$
est utilisé pour correspondre à la fin de la chaîne.
ainsi, votre code devrait être: -
>>> s = "99-my-name-is-John-Smith-6376827-%^-1-2-767980716"
>>> import re
>>> re.compile(r'(\d+)$').search(s).group(1)
'767980716'
Et vous n'avez pas besoin d'utiliser str
ici,s
est déjà une chaîne de caractères.
utilisez le regex ci-dessous
\d+$
$
représente la fin de la chaîne..
\d
est un chiffre
+
correspond au caractère précédent 1 à plusieurs fois
Sauvegardez les expressions régulières pour quelque chose qui nécessite un levage plus lourd.
>>> 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'
Essayez d'utiliser \d+$
à la place. Qui correspond à un ou plusieurs caractères numériques suivie par la fin de la chaîne.