Ich habe eine Beispielzeichenfolge <alpha.Customer[cus_Y4o9qMEZAugtnW] active_card=<alpha.AlphaObject[card] ...>, created=1324336085, description='Customer for My Test App', livemode=False>
Ich möchte nur den Wert cus_Y4o9qMEZAugtnW
und NICHT card
(der sich in einem anderen []
befindet)
Wie kann ich das in Python so einfach wie möglich machen? Vielleicht mit RegEx (wozu ich nicht gut bin)?
Wie wäre es mit:
import re
s = "alpha.Customer[cus_Y4o9qMEZAugtnW] ..."
m = re.search(r"\[([A-Za-z0-9_]+)\]", s)
print m.group(1)
Für mich druckt das:
cus_Y4o9qMEZAugtnW
Beachten Sie, dass der Aufruf von re.search(...)
die erste Übereinstimmung mit dem regulären Ausdruck findet, also den [card]
nicht findet, es sei denn, Sie wiederholen die Suche ein zweites Mal.
Edit: Der reguläre Ausdruck Hier handelt es sich um ein Python Rohes Stringliteral , was im Wesentlichen bedeutet, dass die umgekehrten Schrägstriche nicht als Sonderzeichen behandelt werden und unverändert an die re.search()
-Methode übergeben werden. Die Teile des regulären Ausdrucks sind:
\[
entspricht einem literalen [
-Zeichen(
beginnt eine neue Gruppe[A-Za-z0-9_]
ist ein Zeichensatz, der mit jedem Buchstaben (Groß- oder Kleinschreibung), Ziffern oder Unterstrichen übereinstimmt+
stimmt ein- oder mehrmals mit dem vorhergehenden Element (dem Zeichensatz) überein.)
beendet die Gruppe\]
entspricht einem literalen ]
-ZeichenEdit: Wie D K hervorgehoben hat, könnte der reguläre Ausdruck folgendermaßen vereinfacht werden:
m = re.search(r"\[(\w+)\]", s)
da \w
eine spezielle Sequenz ist, die je nach [a-zA-Z0-9_]
und re.LOCALE
dasselbe wie re.UNICODE
bedeutet.
Dies sollte die Arbeit erledigen:
re.match(r"[^[]*\[([^]]*)\]", yourstring).groups()[0]
Sie können dazu str.split
verwenden.
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]
Dann haben wir:
>>> val
'cus_Y4o9qMEZAugtnW'
your_string = "lnfgbdgfi343456dsfidf[my data] ljfbgns47647jfbgfjbgskj"
your_string[your_string.find("[")+1 : your_string.find("]")]
höflichkeit: Regulärer Ausdruck, um Text zwischen Klammern zurückzugeben
Sie können auch verwenden
re.findall(r"\[([A-Za-z0-9_]+)\]", string)
wenn es viele Vorkommnisse gibt, die Sie gerne finden würden.
Siehe auch für weitere Informationen: Wie finde ich alle Übereinstimmungen mit einem regulären Ausdruck in Python?
Sie können verwenden
import re
s = re.search(r"(\[.*?]", string)
print(s.group(0))