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?

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

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.)


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”.


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

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.


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")

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()

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)))

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ęść.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.