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 NOT card
(qui est dans un autre []
)
Comment pourrais-je le faire de la manière la plus simple possible en Python?
Que diriez-vous:
import re
s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m = re.search(r"\[([A-Za-z0-9_]+)\]", s)
print m.group(1)
Pour moi cela imprime:
cus_Y4o9qMEZAugtnW
Notez que l'appel à re.search(...)
trouve la première correspondance avec l'expression régulière et qu'il ne trouve donc le [card]
que si vous répétez la recherche une seconde fois.
Edit: Le expression régulière ici est un python chaîne littérale brute , ce qui signifie que les barres obliques inverses ne sont pas traitées comme des caractères spéciaux et sont transmises à la méthode re.search()
sans modification. Les parties de l'expression régulière sont les suivants:
\[
correspond à un littéral [
caractère(
commence un nouveau groupe[A-Za-z0-9_]
est un jeu de caractères correspondant à toute lettre (majuscule ou minuscule), chiffre ou trait de soulignement+
correspond à l'élément précédent (le jeu de caractères) une ou plusieurs fois.)
termine le groupe\]
correspond à un littéral ]
caractèreEdit: Comme D K l’a souligné, l’expression régulière pourrait être simplifiée comme suit:
m = re.search(r"\[(\w+)\]", s)
étant donné que \w
est une séquence spéciale qui signifie la même chose que [a-zA-Z0-9_]
en fonction des paramètres re.LOCALE
et re.UNICODE
.
Cela devrait faire le travail:
re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]
Vous pouvez 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]
Ensuite nous avons:
>>> val
'cus_Y4o9qMEZAugtnW'
your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]
courtesy: Expression rationnelle pour retourner le texte entre parenthèses
Vous pouvez aussi utiliser
re.findall(r"\[([A-Za-z0-9_]+)\]", string)
s'il y a beaucoup d'occurrences que vous voudriez trouver.
Voir aussi pour plus d'informations: Comment trouver toutes les correspondances à une expression régulière en Python?
Vous pouvez utiliser
import re
s = re.search(r"(\[.*?]", string)
print(s.group(0))