Obtenir la chaîne de caractères à l'intérieur de crochets en Python
J'ai un exemple de chaîne <alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card] ...>, created=1324336085, description='Customer for My Test App', livemode=False>
Je veux seulement la valeur cus_Y4o9qMEZAugtnW
et PAS card
(qui est à l'intérieur d'un autre []
)
Comment pourrais-je le faire dans la meilleure façon possible en Python?
Peut-être en utilisant les RegEx (dont je ne suis pas bon à l')?
OriginalL'auteur user993563 | 2011-12-20
Vous devez vous connecter pour publier un commentaire.
Comment sur:
Pour moi cette affiche:
Noter que l'appel à
re.search(...)
trouve le premier match à l'expression régulière, de sorte qu'il ne trouve pas le[card]
à moins que vous répétez la recherche d'un deuxième temps.Edit: La expression régulière ici est un python raw littéral de chaîne, ce qui signifie fondamentalement les barres obliques inverses ne sont pas traités comme des caractères spéciaux et sont transmis par le biais de la
re.search()
méthode inchangée. Le pièces de l'expression régulière sont:\[
correspond à un littéral[
caractère(
commence un nouveau groupe[A-Za-z0-9_]
est un jeu de caractères correspondant à une lettre (majuscule ou minuscule), d'un chiffre ou un caractère de soulignement+
correspond à l'élément précédent (le jeu de caractères) une ou plusieurs fois.)
se termine le groupe\]
correspond à un littéral]
caractèreEdit: Comme D K a souligné, à l'expression régulière peut être simplifiée:
depuis le
\w
est une séquence spécifique qui signifie la même chose que[a-zA-Z0-9_]
selon lere.LOCALE
etre.UNICODE
paramètres.J'ai édité ma réponse avec une explication de l'expression régulière et des liens vers le python ordinaire de l'expression de la documentation.
Pourquoi ne pas remplacer
[A-Za-z0-9_]
avec\w
?Oui, vous pouvez remplacer
[A-Za-z0-9_]
avec\w
.Dans un jeu de caractères que vous n'avez pas besoin d'échapper les caractères spéciaux, à l'exception de '-' ou ']'. Pour inclure un tableau de bord vous pouvez faites-le précéder d'une barre oblique, ou en faire le premier ou le dernier caractère de l'ensemble. Donc, en utilisant '[A-Za-z0-9_+-]' devrait fonctionner. Voir le Python syntaxe d'expression régulière de la documentation
OriginalL'auteur srgerg
Cela devrait faire l'affaire:
OriginalL'auteur redShadow
Vous pouvez utiliser
str.split
pour ce faire.Puis nous avons:
si il l'habitude de effet beaucoup, mais lequel des deux à l'aide de regex/split est plus efficace. Aussi pourriez-vous veuillez expliquer votre fractionnement de la partie. Merci.
Jetez un oeil sur le lien pour
str.split
dans la réponse pour des exemples. Brièvement, la premièresplit
dans la solution renvoie une liste de longueur, deux; le premier élément est la sous-chaîne avant la première[
, la seconde est la sous-chaîne après]
. Comme pour les performances, vous devez mesurer que trouver (regardeztimeit
). Si vous envisagez de faire l'extraction de la valeur à plusieurs reprises dans une exécution du programme et de décider d'utiliser des expressions régulières, vous pouvezcompile
la regex.Noter que votre demande pour la "meilleure manière possible en python" peut être en contradiction avec le critère de performance. J'ai choisi d'utiliser
split
parce que je sentais que reflète votre demande de "plus facile".merci pour votre explication David. Je l'apprécie.
OriginalL'auteur David Alber
courtoisie: Expression régulière pour renvoyer le texte entre parenthèses
OriginalL'auteur OmaL
Vous pouvez également utiliser
si il y a beaucoup d'événements que vous souhaitez trouver.
Voir aussi pour plus d'info:
Comment puis-je trouver tous les matches d'une expression régulière en Python?
OriginalL'auteur Brandon Keith Biggs
Vous pouvez utiliser
OriginalL'auteur shubham