Cómo determinar si una subcadena está en una cadena diferente

107

Tengo una subcadena:

substring = "please help me out"

Tengo otra cadena:

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

¿Cómo encuentro si substringes un subconjunto del stringuso de Python?

soleado
fuente

Respuestas:

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
MarcoS
fuente
10
Dios, Python es demasiado fuerte, pensé que necesitaba una función para hacerlo, pero es una
incorporada
De hecho, estaba aprendiendo JS después de aprender Python, para esto necesitaría agregar muchas declaraciones if else y otras cosas. Entonces, solo quería recordarme a mí mismo cómo se hace en Python, esta respuesta me hizo decirme a mí mismo '¡Por supuesto!', Quiero decir, cosas como esta en Python son tan triviales que nunca las piensas mucho. : P
Games Brainiac
@GamesBrainiac En realidad, para hacer lo mismo en JS es solo string.indexOf(substring) != -1, más aquí
LasagnaAndroid
Una vez que encuentre, sí, la subcadena existe en la cadena, ¿cómo encuentra en qué posición está la cadena y qué sucede si la subcadena está en la cadena más de una vez?
yoshiserry
@yoshiserry si quieres la posición de substringen string, entonces quieres usar string.index
MarcoS
21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(Por cierto, intente no nombrar una variable string, ya que hay una biblioteca estándar de Python con el mismo nombre. Puede confundir a la gente si hace eso en un proyecto grande, por lo que evitar colisiones como esa es un buen hábito).

Ámbar
fuente
No solo confunde, sino que también rompe todo lo que hace referencia a la cadena después de ese punto.
rplnt
13

Si está buscando algo más que Verdadero / Falso, sería mejor utilizar el módulo re, como:

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() devolverá la cadena "por favor, ayúdame".

ewegesin
fuente
1
Buen consejo sobre búsquedas de expresiones regulares.
Randall Cook
en una nota más ligera. si está tratando de resolver algo con expresión regular, está tratando de resolver dos problemas.
Hasan Iqbal
10

Pensé que agregaría esto en caso de que esté buscando cómo hacer esto para una entrevista técnica en la que no quieren que use la función incorporada de Python ino find, lo cual es horrible, pero sucede:

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
QueenJolene
fuente
2
Buen ejemplo, pero su identificación es incorrecta. Y para acelerar las cosas, verificaría if len(substring) > len(string) return Falsetambién que el rango del bucle debería ser mejor range(len(string)-len(substring))porque no encontrará una palabra de tres letras en las dos últimas letras de la cadena. (Guarda algunas iteraciones).
AnyOneElse
9

Las personas mencionaron string.find(), string.index()y string.indexOf()en los comentarios, y los resumo aquí (de acuerdo con la documentación de Python ):

En primer lugar, no existe un string.indexOf()método. El enlace publicado por Deviljho muestra que esta es una función de JavaScript.

En segundo lugar, string.find()y en string.index()realidad devuelve el índice de una subcadena. La única diferencia es cómo manejan la situación de subcadena no encontrada: string.find()devuelve -1mientras string.index()genera un ValueError.

Samuel Li
fuente
5

También puede probar el método find (). Determina si la cadena str ocurre en una cadena o en una subcadena de cadena.

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")
Abhishek Gupta
fuente
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
Fredrik Pihl
fuente
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()
avina k
fuente
encuentra la subcadena 'bob' en una cadena dada.
avina k
0

También puede utilizar este método

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

ingrese la descripción de la imagen aquí

En lugar de usar find (), una de las formas más fáciles es el uso de 'in' como arriba.

si 'subcadena' está presente en 'str', entonces si parte se ejecutará, de lo contrario, parte se ejecutará.

Dcoder14
fuente