Come determinare se una sottostringa si trova in una stringa diversa


107

Ho una sottostringa:

substring = "please help me out"

Ho un'altra stringa:

string = "please help me out so that I could solve this"

Come faccio a sapere se substringè un sottoinsieme stringdell'uso di Python?

Risposte:


169

con in: substring in string:

>>> substring = "please help me out"
>>> string = "please help me out so that I could solve this"
>>> substring in string
True

10
accidenti, python è troppo forte, pensavo avesse bisogno di una funzione per farlo, ma è una funzione
incorporata

In realtà stavo imparando JS dopo aver imparato Python, per questo dovresti aggiungere un sacco di istruzioni if ​​else e altre cose. Quindi, volevo solo ricordare a me stesso come è fatto in Python, questa risposta mi ha fatto dire a me stesso "Certo!", Voglio dire che cose come questa in Python sono così banali che non ci pensi mai molto! : P
Games Brainiac

@GamesBrainiac In realtà, per fare lo stesso in JS è solo string.indexOf(substring) != -1, più qui
LasagnaAndroid

Una volta trovato, sì la sottostringa esiste in stringa, come si fa a trovare in quale posizione si trova la stringa e cosa succede se la sottostringa è nella stringa più di una volta?
yoshiserry

@yoshiserry se vuoi la posizione di substringin string, allora usa string.index
MarcoS

21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(A proposito, prova a non nominare una variabile string, poiché esiste una libreria standard Python con lo stesso nome. Potresti confondere le persone se lo fai in un progetto di grandi dimensioni, quindi evitare collisioni come questa è una buona abitudine.)


Non solo confonde, ma interrompe anche tutto ciò che fa riferimento alla stringa dopo quel punto.
rplnt

13

Se stai cercando più di un vero / falso, saresti più adatto a utilizzare il modulo re, come:

import re
search="please help me out"
fullstring="please help me out so that I could solve this"
s = re.search(search,fullstring)
print(s.group())

s.group() restituirà la stringa "please help me out".


1
Buon consiglio sulle ricerche con espressioni regolari.
Randall Cook

su una nota più leggera. se stai cercando di risolvere qualcosa con l'espressione regolare, stai cercando di risolvere due problemi.
Hasan Iqbal

10

Ho pensato di aggiungere questo nel caso tu stia cercando come farlo per un colloquio tecnico in cui non vogliono che tu usi la funzione incorporata di Python ino find, il che è orribile, ma succede:

string = "Samantha"
word = "man"

def find_sub_string(word, string):
  len_word = len(word)  #returns 3

  for i in range(len(string)-1):
    if string[i: i + len_word] == word:
  return True

  else:
    return False

2
Bel esempio, ma la tua identificazione non è corretta. E per velocizzare le cose, controllerei if len(substring) > len(string) return Falseanche che l'intervallo del ciclo dovrebbe essere meglio range(len(string)-len(substring))perché non troverai una parola di tre lettere nelle ultime due lettere della stringa. (Salva alcune iterazioni).
AnyOneElse

9

Le persone menzionate string.find(), string.index()e string.indexOf()nei commenti, e le riassumo qui (secondo la documentazione di Python ):

Prima di tutto non c'è un string.indexOf()metodo. Il collegamento pubblicato da Deviljho mostra che si tratta di una funzione JavaScript.

Secondo string.find()e string.index()restituisce effettivamente l'indice di una sottostringa. L'unica differenza è come gestiscono la situazione di sottostringa non trovata: string.find()restituisce -1mentre string.index()solleva un file ValueError.


5

Puoi anche provare il metodo find (). Determina se string str si trova in string o in una sottostringa di string.

str1 = "please help me out so that I could solve this"
str2 = "please help me out"

if (str1.find(str2)>=0):
  print("True")
else:
  print ("False")

1
In [7]: substring = "please help me out"

In [8]: string = "please help me out so that I could solve this"

In [9]: substring in string
Out[9]: True

1
def find_substring():
    s = 'bobobnnnnbobmmmbosssbob'
    cnt = 0
    for i in range(len(s)):
        if s[i:i+3] == 'bob':
            cnt += 1
    print 'bob found: ' + str(cnt)
    return cnt

def main():
    print(find_substring())

main()

trova la sottostringa "bob" in una data stringa.
avina k

0

Può anche usare questo metodo

if substring in string:
    print(string + '\n Yes located at:'.format(string.find(substring)))

0

inserisci qui la descrizione dell'immagine

Invece di usare find (), uno dei modi più semplici è l'uso di 'in' come sopra.

se "sottostringa" è presente in "str", se parte verrà eseguita, altrimenti verrà eseguita altrimenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.