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.

18
demandé sur JohnJ 2012-11-22 23:18:08

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é avec group(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.
28
répondu phihag 2012-11-22 19:29:27

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

7
répondu Chris Seymour 2012-11-22 19:30:50

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.

5
répondu Rohit Jain 2012-11-22 19:20:42

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

3
répondu Anirudha 2012-11-22 19:20:35

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'
3
répondu Droogans 2012-11-22 21:39:11

Essayez d'utiliser \d+$ à la place. Qui correspond à un ou plusieurs caractères numériques suivie par la fin de la chaîne.

2
répondu Asad Saeeduddin 2012-11-22 19:20:58