>} {message}" - Retrouvez les réponses et les commentaires concernant cette question" />
0
votes

Comment peut-on utiliser Re.Findall sur une chaîne comme "{asctime} _ {|} {niveau} _ {|} {nom} __ {>>} {message}"

J'ai une chaîne simple comme ceci: xxx pré>

Je souhaite utiliser regex pour la convertir en ci-dessous (préservant WhitSpace), en utilisant probablement re.findall code> : p> xxx pré>

Comment cela pourrait-il être fait? p>

Voici où je dois: P>

re.findall(r'\{.\}', s)


0 commentaires

4 Réponses :


0
votes

Pas vraiment une regex mais cela se fait faire: xxx


0 commentaires

2
votes

Ceci semble fonctionner xxx

renvoie xxx


2 commentaires

HM, merci, mais quand j'essaie de courir cela, je reçois un "Split () nécessite une correspondance de modèle non vide". Erreur?


@BlandCorporation, intéressant. Je viens de la copier en collé dans un nouveau cahier Jupyter et cela a couru bien. En utilisant Python 3.7.3



2
votes

Vous allez ici:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

p = re.compile(r'(\s?\{\w*\}[\s_]*(\{([|]*|[>]*)\})?)')
s = "{asctime} _{|} {level} _{|} {name} __{>>} {message}"

new_s = "\n".join([x[0] for x in re.findall(p, s)])


2 commentaires

Ah, ça a l'air génial. Y a-t-il un moyen de généraliser là-bas d'être n'importe quel numéro de | caractères ou n'importe quel numéro numéro > "


devrait fonctionner maintenant avec un nombre quelconque de | et > @blandcorporation



1
votes

Vous pouvez également utiliser un motif sans groupes de capture: xxx

explication

    • {[^}] +} correspondez {, 1 fois plus n'importe quel caractère autre que { et correspond à }
    • (?: groupe de capture
      • (?: correspondre à un espace et démarrez le groupe de capture pour une alternance
        • _ {\ |} correspondez _ {|}
        • | ou
        • __ {>>} correspondre __ {>>}
        • ) close group
        • )? Fermer le groupe et faites-le en option

          Démo Regex | Demo Python

          code d'exemple xxx < p> sortie xxx


0 commentaires