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\dsont 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.