400 Stimmen

Zeichenkette zwischen zwei Teilstrings finden

Wie finde ich eine Zeichenkette zwischen zwei Teilstrings ( '123STRINGabc' -> 'STRING' )?

Meine derzeitige Methode sieht folgendermaßen aus:

>>> start = 'asdf=5;'
>>> end = '123jasd'
>>> s = 'asdf=5;iwantthis123jasd'
>>> print((s.split(start))[1].split(end)[0])
iwantthis

Dies erscheint jedoch sehr ineffizient und unpythonisch. Gibt es eine bessere Möglichkeit, so etwas zu tun?

Vergessen zu erwähnen: Die Zeichenkette beginnt und endet nicht unbedingt mit start y end . Sie können mehr Zeichen vor und nach haben.

510voto

Nikolaus Gradwohl Punkte 18644
import re

s = 'asdf=5;iwantthis123jasd'
result = re.search('asdf=5;(.*)123jasd', s)
print(result.group(1))

185voto

cji Punkte 6426
s = "123123STRINGabcabc"

def find_between( s, first, last ):
    try:
        start = s.index( first ) + len( first )
        end = s.index( last, start )
        return s[start:end]
    except ValueError:
        return ""

def find_between_r( s, first, last ):
    try:
        start = s.rindex( first ) + len( first )
        end = s.rindex( last, start )
        return s[start:end]
    except ValueError:
        return ""

print find_between( s, "123", "abc" )
print find_between_r( s, "123", "abc" )

gibt:

123STRING
STRINGabc

Ich dachte, es sollte erwähnt werden, dass Sie je nach dem, welches Verhalten Sie benötigen, Folgendes mischen können index y rindex aufruft oder eine der obigen Versionen verwendet (das ist das Äquivalent zu regex (.*) y (.*?) Gruppen).

143voto

ansetou Punkte 1351
start = 'asdf=5;'
end = '123jasd'
s = 'asdf=5;iwantthis123jasd'
print s[s.find(start)+len(start):s.rfind(end)]

gibt

iwantthis

63voto

Tim McNamara Punkte 17453
s[len(start):-len(end)]

47voto

reubano Punkte 4501

Ich setze nur die Lösung des Auftraggebers in eine Antwort um:

def find_between(s, start, end):
    return (s.split(start))[1].split(end)[0]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X