586 Stimmen

Wie findet man alle Vorkommen einer Teilzeichenkette?

Python hat string.find() y string.rfind() um den Index einer Teilzeichenkette in einer Zeichenkette zu ermitteln.

Ich frage mich, ob es so etwas gibt wie string.find_all() die alle gefundenen Indizes zurückgeben kann (nicht nur den ersten vom Anfang oder den ersten vom Ende).

Zum Beispiel:

string = "test test test test"

print string.find('test') # 0
print string.rfind('test') # 15

#this is the goal
print string.find_all('test') # [0,5,10,15]

20 Stimmen

Was sollte 'ttt'.find_all('tt') zurückkehren?

4 Stimmen

Sollte er '0' zurückgeben. Natürlich muss es in einer perfekten Welt auch eine 'ttt'.rfind_all('tt') was '1' ergeben sollte.

5 Stimmen

Reine Anfragen zum Schreiben von Code sind auf Stack Overflow tabu - wir erwarten, dass sich die Fragen hier auf spezifisch Programmierprobleme - aber wir helfen Ihnen gerne, sie selbst zu schreiben! Sagen Sie es uns was Sie ausprobiert haben und wo Sie feststecken. Dies wird uns auch helfen, Ihre Frage besser zu beantworten.

7voto

Sie können es versuchen:

import re
str1 = "This dress looks good; you have good taste in clothes."
substr = "good"
result = [_.start() for _ in re.finditer(substr, str1)]
# result = [17, 32]

6voto

Harsha Biyani Punkte 6605

Sie können es versuchen:

>>> string = "test test test test"
>>> for index,value in enumerate(string):
    if string[index:index+(len("test"))] == "test":
        print index

0
5
10
15

6voto

Andrew H Punkte 466

Dieser Thread ist zwar schon etwas älter, aber bei mir hat das funktioniert:

numberString = "onetwothreefourfivesixseveneightninefiveten"
testString = "five"

marker = 0
while marker < len(numberString):
    try:
        print(numberString.index("five",marker))
        marker = numberString.index("five", marker) + 1
    except ValueError:
        print("String not found")
        marker = len(numberString)

4voto

mascai Punkte 856
src = input() # we will find substring in this string
sub = input() # substring

res = []
pos = src.find(sub)
while pos != -1:
    res.append(pos)
    pos = src.find(sub, pos + 1)

3voto

Diese Funktion betrachtet nicht alle Positionen innerhalb der Zeichenkette und verschwendet keine Rechenressourcen. Mein Versuch:

def findAll(string,word):
    all_positions=[]
    next_pos=-1
    while True:
        next_pos=string.find(word,next_pos+1)
        if(next_pos<0):
            break
        all_positions.append(next_pos)
    return all_positions

um es zu verwenden, rufen Sie es so auf:

result=findAll('this word is a big word man how many words are there?','word')

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