>} {message}" - Retrouvez les réponses et les commentaires concernant cette question" />
J'ai une chaîne simple comme ceci: Je souhaite utiliser regex pour la convertir en ci-dessous (préservant WhitSpace), en utilisant probablement Comment cela pourrait-il être fait? p> Voici où je dois: P> re.findall code> : p>
re.findall(r'\{.\}', s)
4 Réponses :
Pas vraiment une regex mais cela se fait faire:
Ceci semble fonctionner renvoie p>
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
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)])
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 i> de | code> caractères ou n'importe quel numéro i> numéro
> code> "
devrait fonctionner maintenant avec un nombre quelconque de | code> et
> code> @blandcorporation
Vous pouvez également utiliser un motif sans groupes de capture: explication forte> p> Démo Regex | Demo Python P> code d'exemple p>
{[^}] +} code> correspondez
{ code>, 1 fois plus n'importe quel caractère autre que
{ code> et correspond à
} Code> li>
(?: code> groupe de capture
(?: code> correspondre à un espace et démarrez le groupe de capture pour une alternance
_ {\ |} code> correspondez
_ {|} code> li>
| code> ou li>
__ {>>} code> correspondre
__ {>>} code> li>
ul> li>
) code> close group li>
ul> li>
)? code> Fermer le groupe et faites-le en option Li>
ul>