Wie kann ich einen String nach einem bestimmten Teilstring erhalten?
Zum Beispiel möchte ich die Zeichenfolge nach "world"
in erhaltenmy_string="hello python world , i'm a beginner "
Der einfachste Weg ist wahrscheinlich, nur Ihr Zielwort aufzuteilen
my_string="hello python world , i'm a beginner "
print my_string.split("world",1)[1]
Beim Teilen wird das Wort (oder Zeichen) geteilt und optional die Anzahl der Teilungen begrenzt.
In diesem Beispiel auf "Welt" aufteilen und auf nur eine Aufteilung beschränken.
target.split('lower',1)[-1].split('low',1)[-1]
my_string.partition("world")[-1]
(oder...[2]
) ist schneller.Wenn Sie sich mit dem Fall befassen möchten, in dem
s2
es nicht vorhanden ists1
, verwenden Sies1.find(s2)
im Gegensatz zuindex
. Wenn der Rückgabewert dieses Aufrufs ist-1
,s2
ist er nicht ins1
.quelle
print( s1[s1.index(s2) + len(s2):] is s1[s1.index(s2) + len(s2):])
Ich bin überrascht, dass niemand etwas erwähnt hat
partition
.IMHO ist diese Lösung besser lesbar als die von @ arshajii. Abgesehen davon denke ich, dass @ arshajiis das Beste ist, um am schnellsten zu sein - es werden keine unnötigen Kopien / Teilzeichenfolgen erstellt.
quelle
str.split(..., 1)
.Sie möchten verwenden
str.partition()
:weil diese Option schneller ist als die Alternativen .
Beachten Sie, dass dies eine leere Zeichenfolge erzeugt, wenn das Trennzeichen fehlt:
Wenn Sie die ursprüngliche Zeichenfolge haben möchten, testen Sie, ob der zweite Wert von zurückgegeben wurde
str.partition()
nicht leer ist:Sie könnten auch verwenden
str.split()
mit einem Limit von 1 verwenden:Diese Option ist jedoch langsamer . Für ein Best-Case-Szenario
str.partition()
ist es leicht etwa 15% schneller alsstr.split()
:Dies zeigt die Zeiten pro Ausführung mit Eingaben, bei denen das Trennzeichen entweder fehlt (Worst-Case-Szenario), zuerst platziert wird (Best-Case-Szenario) oder in der unteren Hälfte, oberen Hälfte oder letzten Position. Die schnellste Zeit ist mit
[...]
und<...>
die schlechteste markiert.Die obige Tabelle wird durch ein umfassendes Zeitfahren für alle drei unten erstellten Optionen erstellt. Ich habe die Tests auf Python 3.7.4 auf einem 15 "Macbook Pro 2017 mit 2,9 GHz Intel Core i7 und 16 GB RAM durchgeführt.
Dieses Skript generiert zufällige Sätze mit und ohne das zufällig ausgewählte Trennzeichen und führt, falls vorhanden, an verschiedenen Positionen im generierten Satz die Tests in zufälliger Reihenfolge mit Wiederholungen aus (wobei die fairsten Ergebnisse erzielt werden, die zufällige OS-Ereignisse berücksichtigen, die während des Tests stattfinden). und druckt dann eine Tabelle mit den Ergebnissen:
quelle
Wenn Sie dies mit Regex tun möchten, können Sie einfach eine nicht erfassende Gruppe verwenden , um das Wort "Welt" zu erhalten und anschließend alles wie folgt abzurufen
Die Beispielzeichenfolge wird hier getestet
quelle
result = re.search(r"(?:world)(.*)", "hello python world , i'm a beginner ").group(1)
Sie können dieses Paket namens "Teilzeichenfolge" verwenden. Geben Sie einfach "pip install substring" ein. Sie können den Teilstring erhalten, indem Sie nur die Start- und Endzeichen / -indizes erwähnen.
Beispielsweise:
Ausgabe:
s = defghijklmn
quelle
Es ist eine alte Frage, aber ich sah mich einem sehr ähnlichen Szenario gegenüber. Ich muss eine Zeichenfolge teilen, indem ich als Entmiliter das Wort "niedrig" verwende. Das Problem für mich war, dass ich in derselben Zeichenfolge das Wort unten und unten habe.
Ich habe es mit dem re-Modul auf diese Weise gelöst
Verwenden Sie re.split mit Regex, um das genaue Wort zu finden
Der generische Code lautet:
Hoffe das kann jemandem helfen!
quelle
string.partition(" low ")[2]
? (Beachten Sie die Leerzeichen auf beiden Seiten vonlow
Versuchen Sie diesen allgemeinen Ansatz:
quelle
In Python 3.9 wird eine neue
removeprefix
Methode hinzugefügt:quelle