43 votes

Obtenir la chaîne entre parenthèses en Python

J'ai un exemple de chaîne de caractères <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 NON card (qui est à l'intérieur d'un autre [] )

Comment puis-je le faire de la manière la plus simple possible en Python ? Peut-être en utilisant RegEx (ce que je ne sais pas faire) ?

85voto

srgerg Points 8142

Pourquoi pas :

import re

s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m = re.search(r"\[([A-Za-z0-9_]+)\]", s)
print m.group(1)

Pour moi, cette empreinte :

cus_Y4o9qMEZAugtnW

Notez que l'appel à re.search(...) trouve la première correspondance avec l'expression régulière, de sorte qu'il ne trouve pas l'adresse de l'utilisateur. [card] à moins que vous ne répétiez la recherche une seconde fois.

Edit : Le site expression régulière voici un python littéral de chaîne de caractères brut ce qui signifie que les barres obliques inversées ne sont pas traitées comme des caractères spéciaux et qu'elles sont transmises à la fonction re.search() inchangé. Le site pièces de l'expression régulière sont :

  1. \[ correspond à un littéral [ caractère
  2. ( commence un nouveau groupe
  3. [A-Za-z0-9_] est un jeu de caractères correspondant à n'importe quelle lettre (majuscule ou minuscule), chiffre ou trait de soulignement
  4. + correspond à l'élément précédent (le jeu de caractères) une ou plusieurs fois.
  5. ) termine le groupe
  6. \] correspond à un littéral ] caractère

Edit : Comme D K l'a fait remarquer, l'expression régulière pourrait être simplifiée à :

m = re.search(r"\[(\w+)\]", s)

depuis le \w est une séquence spéciale qui signifie la même chose que [a-zA-Z0-9_] en fonction de la re.LOCALE y re.UNICODE paramètres.

18voto

redShadow Points 3858

Cela devrait faire l'affaire :

re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]

16voto

David Alber Points 6205

Vous pourriez utiliser str.split pour le faire.

s = "<alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card]\
 ...>, created=1324336085, description='Customer for My Test App',\
 livemode=False>"
val = s.split('[', 1)[1].split(']')[0]

Alors nous avons :

>>> val
'cus_Y4o9qMEZAugtnW'

8voto

OmaL Points 3347
your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]

courtoisie : Expression régulière pour retourner le texte entre parenthèses

4voto

shubham Points 49

Vous pouvez utiliser

import re

s = re.search(r"\[.*?]", string)
if s:
    print(s.group(0))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X