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.

39voto

Tim McNamara Punkte 17453

Die Formatierung von Zeichenketten verleiht dem Vorschlag von Nikolaus Gradwohl eine gewisse Flexibilität. start y end kann nun nach Belieben geändert werden.

import re

s = 'asdf=5;iwantthis123jasd'
start = 'asdf=5;'
end = '123jasd'

result = re.search('%s(.*)%s' % (start, end), s).group(1)
print(result)

35voto

Fernando Wittmann Punkte 1308

Wenn Sie nichts importieren wollen, versuchen Sie es mit der String-Methode .index() :

text = 'I want to find a string between two substrings'
left = 'find a '
right = 'between two'

# Output: 'string'
print(text[text.index(left)+len(left):text.index(right)])

16voto

tstoev Punkte 1330
source='your token _here0@df and maybe _here1@df or maybe _here2@df'
start_sep='_'
end_sep='@df'
result=[]
tmp=source.split(start_sep)
for par in tmp:
  if end_sep in par:
    result.append(par.split(end_sep)[0])

print result

zeigen muss: hier0, hier1, hier2

die Regex ist besser, aber es wird zusätzliche Lib erfordern und Sie können für Python nur gehen wollen

15voto

John La Rooy Punkte 278961

So kann man vorgehen

_,_,rest = s.partition(start)
result,_,_ = rest.partition(end)
print result

Ein anderer Weg mit regexp

import re
print re.findall(re.escape(start)+"(.*)"+re.escape(end),s)[0]

ou

print re.search(re.escape(start)+"(.*)"+re.escape(end),s).group(1)

6voto

Mnyikka Punkte 1203

Hier ist eine Funktion, die ich tat, um eine Liste mit einer Zeichenfolge (s) zwischen string1 und string2 gesucht zurückgeben.

def GetListOfSubstrings(stringSubject,string1,string2):
    MyList = []
    intstart=0
    strlength=len(stringSubject)
    continueloop = 1

    while(intstart < strlength and continueloop == 1):
        intindex1=stringSubject.find(string1,intstart)
        if(intindex1 != -1): #The substring was found, lets proceed
            intindex1 = intindex1+len(string1)
            intindex2 = stringSubject.find(string2,intindex1)
            if(intindex2 != -1):
                subsequence=stringSubject[intindex1:intindex2]
                MyList.append(subsequence)
                intstart=intindex2+len(string2)
            else:
                continueloop=0
        else:
            continueloop=0
    return MyList

#Usage Example
mystring="s123y123o123pp123y6"
List = GetListOfSubstrings(mystring,"1","y68")
for x in range(0, len(List)):
               print(List[x])
output:

mystring="s123y123o123pp123y6"
List = GetListOfSubstrings(mystring,"1","3")
for x in range(0, len(List)):
              print(List[x])
output:
    2
    2
    2
    2

mystring="s123y123o123pp123y6"
List = GetListOfSubstrings(mystring,"1","y")
for x in range(0, len(List)):
               print(List[x])
output:
23
23o123pp123

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