0
votes

Python - extrait yyyymmddhhmms de fichier à l'aide de regex

J'essaie d'obtenir la date (le format est yyyymmddhhmmss) à partir d'une chaîne à l'aide de regex, mais je ne trouve pas le modèle à utiliser.

J'essaie avec le code ci-dessous: P>

result = regex.findall(string)[0],
IndexError: list index out of range


2 commentaires

Il y a un \ s dans votre expression qui le gâche


Regex101.com est une excellente ressource pour le débogage des fegexes


4 Réponses :


1
votes

Votre modèle de regex est éteint, car il n'y a pas d'espace dans l'horodatage cible. Voici un moyen simple d'effectuer votre recherche: XXX PRE>

Ceci imprime: P>

['20190529050003']


1 commentaires

Comment est-ce différent du code de l'OP? Selon Les Docs Les deux devraient avoir une fonctionnalité similaire .



0
votes

Je suggère de casser la ligne qui provoque une erreur dans deux lignes:

matches = regex.findall(string)
result = matches[0]


2 commentaires

Le modèle de regex a un problème, que votre réponse ne mentionne pas.


@TimbieGeleisen Vous êtes correct. Je voulais juste signaler le PO dans la direction de la manière de diagnostiquer le problème.



3
votes

Si notre date est juste après la barre oblique, nous pouvons simplement utiliser cette expression: xxx

puis, si nécessaire, et nous souhaitons ajouter plus de frontières, nous pouvons sûrement le faire, telle Comme: xxx

démo < / h3>

ou: xxx

Démo

test xxx

Si nous pouvions vouloir obtenir tous les numéros, nous pourrions utiliser une autre expression: xxx

test xxx

Demo

Circuit de regex

JEX.IM visualise des expressions régulières:

 Entrez la description de l'image ici


0 commentaires

1
votes

s'est débarrassé de \ s code> de l'expression.

string = "date file /20190529050003/folder "
regex = re.compile(r'\b\d{4}\d{2}\d{2}\d{2}\d{2}\d{2}\b')
result = regex.findall(string)[0]
'20190529050003'


2 commentaires

Il n'y a pas de point à tout moment à avoir tellement de groupes distincts \ d {x} . Il suffit d'utiliser \ d {14} .


D'accord, mais je voulais expliquer pourquoi le code d'origine n'a pas fonctionné.