Jak ustalić, czy podciąg znajduje się w innym ciągu

107

Mam podciąg:

substring = "please help me out"

Mam inny ciąg:

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

Jak sprawdzić, czy substringjest podzbiorem stringużywania języka Python?

słoneczny
źródło

Odpowiedzi:

169

z 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
źródło
10
rany, python jest zbyt silny, myślałem, że potrzebuje do tego funkcji, ale jest to wbudowana Oo
dźwięk wiatru
Po prostu uczyłem się JS po nauczeniu się Pythona, w tym celu musiałbyś dodać mnóstwo instrukcji if else i innych rzeczy. Chciałem więc tylko przypomnieć sobie, jak to się robi w Pythonie, ta odpowiedź sprawiła, że ​​powiedziałem sobie „Oczywiście!”, Mam na myśli, że takie rzeczy w Pythonie są tak trywialne, że nigdy nie poświęcasz im wiele uwagi! : P
Games Brainiac
@GamesBrainiac Właściwie, aby zrobić to samo w JS, wystarczy string.indexOf(substring) != -1, więcej tutaj
LasagnaAndroid
Po znalezieniu podłańcucha tak istnieje w ciągu, w jaki sposób można znaleźć pozycję, w której znajduje się ciąg i co się stanie, jeśli podciąg znajduje się w ciągu więcej niż raz?
yoshiserry
@yoshiserry, jeśli chcesz mieć pozycję substringin string, użyj string.index
MarcoS
21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

(Przy okazji - staraj się nie nazywać zmiennej string, ponieważ istnieje standardowa biblioteka Pythona o tej samej nazwie. Możesz zmylić ludzi, jeśli zrobisz to w dużym projekcie, więc unikanie takich kolizji jest dobrym nawykiem.)

Bursztyn
źródło
Nie tylko zmylić, ale także zepsuć wszystko, co odnosi się do łańcucha po tym punkcie.
rplnt
13

Jeśli szukasz czegoś więcej niż prawda / fałsz, najlepiej będzie użyć modułu re, takiego jak:

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() zwróci ciąg „proszę, pomóż mi”.

ewegesin
źródło
1
Dobra wskazówka dotycząca wyszukiwania wyrażeń regularnych.
Randall Cook
w lżejszym tonie. jeśli próbujesz rozwiązać coś za pomocą wyrażenia regularnego, próbujesz rozwiązać dwa problemy.
Hasan Iqbal
10

Pomyślałem, że dodam to na wypadek, gdybyś zastanawiał się, jak to zrobić na rozmowie technicznej, w której nie chcą, abyś używał wbudowanej funkcji Pythona inlub find, co jest okropne, ale się zdarza:

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
źródło
2
Niezły przykład, ale Twoja identyfikacja jest nieprawidłowa. Aby przyspieszyć działanie, sprawdziłbym if len(substring) > len(string) return Falserównież, że zakres pętli powinien być lepszy, range(len(string)-len(substring))ponieważ nie znajdziesz trzyliterowego słowa w dwóch ostatnich literach ciągu. (Zapisuje kilka iteracji).
AnyOneElse
9

Ludzie wspomnieli string.find(), string.index()iw string.indexOf()komentarzach, a ja podsumowuję je tutaj (zgodnie z dokumentacją Pythona ):

Przede wszystkim nie ma string.indexOf()metody. Link opublikowany przez Deviljho pokazuje, że jest to funkcja JavaScript.

Po drugie string.find()i string.index()faktycznie zwracają indeks podciągu. Jedyna różnica polega na tym, jak radzą sobie z sytuacją nie znalezionego podciągu: string.find()zwraca, -1gdy string.index()podnosi ValueError.

Samuel Li
źródło
5

Możesz także wypróbować metodę find (). Określa, czy łańcuch str występuje w łańcuchu, czy w podłańcuchu łańcucha.

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
źródło
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
źródło
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
źródło
znajdź podciąg „bob” w podanym ciągu.
avina k
0

Można również użyć tej metody

if substring in string:
    print(string + '\n Yes located at:'.format(string.find(substring)))
jackotonye
źródło
0

wprowadź opis obrazu tutaj

Zamiast używać funkcji find (), jednym z prostszych sposobów jest użycie „in” jak powyżej.

jeśli „podciąg” jest obecny w „str”, to jeśli część zostanie wykonana, w przeciwnym razie zostanie wykonana część.

Dcoder14
źródło