Wie finde und finde ich alle Vorkommen eines Teilstrings in einer Zeichenkette, indem ich nur finden und ersetzen?

Der Eintrag muss niedriger sein und am Ende muss das Programm die Anzahl der Vorkommnisse ausdrucken. Zum Beispiel mem.

smthing = str(input()) if (smthing == smthing.lower()): smthing.find(mem) 

Ich bin ein totaler Wrack, so dass ich nicht weit gehen könnte.

Ich habe vergessen zu sagen, dass ich keine Zählung oder Liste verwenden kann.

7 Solutions collect form web for “Wie finde und finde ich alle Vorkommen eines Teilstrings in einer Zeichenkette, indem ich nur finden und ersetzen?”

Was ist mit so etwas wie

 string = "hello world hello".lower() replace = "hello".lower() count = 0 while string.find(replace) != -1: string = string.replace(replace, "", 1) count += 1 print count # => Output # => 2 

Um auf die überlappenden Strings aufzupassen, anstatt den gesamten Teilstring zu ersetzen, könnten wir nur ein einzelnes Zeichen ersetzen, vorzugsweise das erste, replace[0] aus dem ursprünglichen String

 string = "boboobobobobob".lower() replace = "bob".lower() count = 0 while string.find(replace) != -1: string = string.replace(replace[0], "", 1) count += 1 print count # Output # => 6 

Wenn du überlappende Saiten hast, musst du einen Charakter aa ersetzen:

 sub = "bob" smthing = input() count = 0 for i in iter(lambda: smthing.find(sub), -1): smthing = smthing.replace(sub[0], "", 1) count += 1 print(count) 

Also für boboobobobobob du 6 statt 3.

Wenn Sie nicht eine Zählung verwenden können, aber nur eine oder andere verwenden können Sie ersetzen alleine, obwohl dies keine Überlappung beinhaltet:

 print((len(smthing) - len(smthing.replace(sub,""))) / len(sub)) 

Sie nicht; Sie benötigen zusätzliche Werkzeuge, evtl. einfach nur Arithmetik. Zum Beispiel, wenn Sie Ihren Teilstring durch eine von einer anderen Länge ersetzen, kann die Länge des Ergebnisses mit dem Original verglichen werden, um die Anzahl der Vorkommen zu zählen. Eine weitere Möglichkeit besteht darin, das Startargument zu verwenden, um zusätzliche Vorkommnisse zu finden. Ich bin sehr daran interessiert zu wissen, was du versucht hast Der Code, den Sie zeigen, erzeugt einfach kein Ergebnis.

Für den Rekord kannst du das mit nur string.replace() :

 smthing = str(input()) word='mem' x=0 while word in smthing: smthing=smthing.replace(word,'',1) x+=1 print x 

Demo:

 >>> memory memory memory 3 

Versuchen Sie diesen Code:

 smthing = "blablabla" mem = "bl" count = 0 if (smthing == smthing.lower()): bkpsmthing = smthing # maybe you'll need it later while (smthing.find(mem) > -1): smthing = smthing.replace(mem, '', 1) count += 1 print count 

Es nutzt die Tatsache, dass str.find gibt -1 zurück, wenn er nichts findet, oder der Index zum niedrigsten Eintrag zu stoppen:

Geben Sie den niedrigsten Index in s zurück, in dem das Substring-Sub gefunden wird, so dass Sub vollständig in s [start: end] enthalten ist. Rückkehr -1 bei Ausfall.

Es nutzt auch die Tatsache, dass str.replace einen einzelnen Eintrag (der niedrigste) mit dem thrid-Argument ( maxreplace ) maxreplace . Auf diese Weise entfernen wir ständig Einträge, die wir gezählt haben:

… Wenn das optionale Argument maxreplace gegeben ist, werden die ersten maxreplace Vorkommen ersetzt.

Der Prozess kann wie folgt beschrieben werden:

 find "bl" in "blablabla" -> found at index 0 replace "bl" in "blablabla" -> gives "ablabla" find "bl" in "ablabla" -> found at index 1 replace "bl" in "ablabla" -> gives "aabla" find "bl" in "aabla" -> found at index 2 replace "bl" in "aabla" -> gives "aaa" find "bl" in "aaa" -> not found, returns -1 stop 

Um die gleiche Sache mit der count , benutze diese einfache Rekursion (amke sicher, dass du die Zeichenfolge vor der Verwendung von my_count validiert my_count ):

 def my_count(my_string, my_substring): if my_string.find(my_substring) > -1: new_string = my_string.replace(my_substring, '', 1) return my_count(new_string, my_substring) + 1 return 0 

Ausgabe:

 >>> my_count("blablabla", "bl") 3 

Die Rekursion entfaltet sich wie folgt:

 my_count("blablabla", "bl") = = my_count("ablabla", "bl") + 1 = = my_count("aabla", "bl") + 1 + 1 = = my_count("aaa", "bl") + 1 + 1 + 1 = = 0 + 1 + 1 + 1 = 3 

Ihr Problem – das Auffinden und Zählen aller Vorkommen eines Teilstrings in einer Zeichenfolge – erfordert nicht das Ersetzen wie definiert.

Sie sollten in der Lage, nur Ihre Eingabe, zwingen, dass es zu senken, und verwenden Sie die Zählmethode, um Teilstrings zu finden.

 num_substrings = input().lower().count(substring) 

Ich sehe diesen Ansatz noch nicht, nur Schleife über finden Zählen Vorkommen:

 a='this is a test aaaa' count =0 loc = a.find('is') while loc > -1: count += 1 loc = a.find('is',loc+1) print count -1 
  • Überprüfen Sie die Teilstring-Übereinstimmung eines Wortes in einer Liste von Wörtern
  • Wie kann man einen Teilstring aus einer String in Python extrahieren?
  • Suchmethode mit leerer Zeichenfolge
  • Warum substring slicing index out of range funktioniert in Python?
  • Finde das n-te Vorkommen von substring in einem String
  • Zählen Sie die Anzahl der x Vorkommen der Länge n (es ist nicht gegeben) der Sub-String in String
  • Wie bekomme ich alle zusammenhängenden Strings in einer String in Python?
  • Python regex finden substrings mit Zahlen zentriert
  • Python - Extrahieren eines Teilstrings mit einer for-Schleife anstelle von Split-Methode oder anderen Mitteln [Duplizieren]
  • Finde Substring in String, aber nur wenn ganze Worte?
  • Web2py Vergleich eines Teils eines request.vars-Elements
  • Python ist die beste Programmiersprache der Welt.