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 NON card
(qui est à l'intérieur d'un autre []
)
Comment pourrais-je le faire de la manière la plus simple possible en Python? Peut-être en utilisant RegEx (dont je ne suis pas bon)?
6 réponses
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, donc il ne trouve pas [card]
sauf si vous répétez la recherche une deuxième fois.
Modifier: l'expression régulière est un python raw string literal , ce qui signifie essentiellement que les barres obliques inverses ne sont pas traitées comme des caractères spéciaux et sont transmises à la méthode re.search()
inchangées . Les parties de l'expression régulière sont:
\[
correspond à un caractère[
littéral(
commence un nouveau groupe[A-Za-z0-9_]
est un jeu de caractères correspondant à n'importe quelle 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 caractère]
littéral
Modifier: Comme l'a souligné D K, l'expression régulière pourrait être simplifiée pour:
m = re.search(r"\[(\w+)\]", s)
Car le \w
est une séquence spéciale qui signifie la même chose que [a-zA-Z0-9_]
selon les paramètres re.LOCALE
et re.UNICODE
.
Vous pouvez aussi utiliser
re.findall(r"\[([A-Za-z0-9_]+)\]", string)
S'il y a beaucoup d'occurrences que vous aimeriez trouver.
Voir aussi pour plus d'informations: Comment puis-je trouver toutes les correspondances avec un expression régulière en Python?
your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]
Courtoisie: Expression régulière pour renvoyer du texte entre parenthèses
Pour ce faire, vous pouvez utiliser str.split
.
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'
Cela devrait faire le travail:
re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]
Vous pouvez utiliser
import re
s = re.search(r"(\[.*?]", string)
print(s.group(0))
Questions connexes
Questions liées
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.