Bir alt dizenin farklı bir dizede olup olmadığı nasıl belirlenir


107

Bir alt dizem var:

substring = "please help me out"

Başka bir dizem var:

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

Python kullanmanın substringbir alt kümesi olup olmadığını nasıl anlarım string?

Yanıtlar:


169

ile 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
Tanrım, python çok güçlü, bunu yapmak için bir işleve ihtiyacı olduğunu düşünüyordum, ama bu yerleşik bir Oo
windsound

Aslında Python'u öğrendikten sonra JS'yi öğreniyordum, bunun için bir sürü if else ifadesi ve başka şeyler eklemeniz gerekecekti. Bu yüzden, sadece Python'da nasıl yapıldığını kendime hatırlatmak istedim, bu cevap kendi kendime 'Elbette!' Dememi sağladı, yani Python'da böyle şeyler o kadar önemsiz ki onlara asla fazla kafa yormazsın! : P
Games Brainiac

@GamesBrainiac Aslında, JS'de aynısını yapmak string.indexOf(substring) != -1daha çok burada
LasagnaAndroid

Evet alt dizesinin dizede var olduğunu bulduğunuzda, dizenin hangi konumda olduğunu nasıl bulursunuz ve alt dizge dizede birden çok kez yer alıyorsa ne olur?
yoshiserry

Eğer konumunu isterseniz @yoshiserry substringiçinde string, o zaman yo kullanım istediğiniz string.index
Marcos

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

(Bu arada - stringaynı ada sahip bir Python standart kitaplığı olduğundan bir değişkeni adlandırmamaya çalışın . Bunu büyük bir projede yaparsanız insanların kafasını karıştırabilirsiniz, bu nedenle böyle çarpışmalardan kaçınmak iyi bir alışkanlıktır.)


Sadece karıştırmakla kalmaz, aynı zamanda bu noktadan sonra dizeyi referans alan her şeyi de kırın.
rplnt

13

Doğru / Yanlış'dan daha fazlasını arıyorsanız, re modülünü kullanmak için en uygun olanıdır, örneğin:

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() "lütfen bana yardım et" dizesini döndürür.


1
Normal ifade aramaları hakkında iyi bir ipucu.
Randall Cook

daha hafif bir notta. düzenli ifade ile bir şeyi çözmeye çalışıyorsanız, iki problemi çözmeye çalışıyorsunuz.
Hasan Iqbal

10

Bunu, Python'un yerleşik işlevini kullanmanızı istemedikleri inveya findkorkunç olan, ancak gerçekleştiği teknik bir röportaj için nasıl yapacağınıza bakıyorsanız ekleyeceğimi düşündüm :

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
Güzel örnek, ama kimliğiniz yanlış. Ve işleri hızlandırmak için if len(substring) > len(string) return False, döngü aralığını da kontrol etmeliyim range(len(string)-len(substring))çünkü dizenin son iki harfinde üç harfli bir kelime bulamayacaksınız. (Birkaç yineleme kaydeder).
AnyOneElse

9

İnsanlar söz string.find(), string.index()ve string.indexOf()yorumlarda, ben (göre onları burada özetlemek Python Belgeler ):

Öncelikle bir string.indexOf()yöntem yok. Deviljho tarafından yayınlanan bağlantı, bunun bir JavaScript işlevi olduğunu gösteriyor.

İkinci olarak string.find()ve string.index()aslında bir alt dizenin dizinini döndürür. : Tek fark onlar alt dize bulunamadı durumu idare nasıl string.find()döner -1iken string.index()bir yükseltir ValueError.


5

Ayrıca find () yöntemini deneyebilirsiniz. Dizge dizesinin dizede mi yoksa dizenin bir alt dizesinde mi oluştuğunu belirler.

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

belirli bir dizedeki 'bob' alt dizesini bulun.
avina k

0

Bu yöntemi de kullanabilir

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

0

görüntü açıklamasını buraya girin

Find () yerine, kolay yollardan biri yukarıdaki gibi 'in' kullanmaktır.

'str' içinde 'alt dize' varsa, o zaman parça çalıştırılacak, aksi takdirde parça çalıştırılacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.