>} {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>