Як визначити, чи є підрядка в іншому рядку


107

У мене є підряд:

substring = "please help me out"

У мене є ще одна рядок:

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

Як дізнатися, чи substringє підмножина stringвикористання Python?

Відповіді:


169

з 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
Боже, python занадто сильний, я думав, що для цього потрібна функція, але це вбудований один Oo
windound

Я просто насправді вивчав JS після вивчення Python, для цього вам потрібно було б додати безліч заяв та інших речей. Отже, я просто хотів нагадати собі, як це робиться в Python. Ця відповідь змусила мене сказати собі: "Звичайно!", Я маю на увазі такі речі, як у Python, просто такі дрібниці, що ти ніколи не задумуєшся над ними! : P
Ігри Brainiac

@GamesBrainiac Власне, зробити те ж саме в JS це просто string.indexOf(substring) != -1, більше тут
LasagnaAndroid

Як тільки ви знайдете, так, підрядка існує в рядку, як ви виявите, в якому положенні знаходиться рядок, і що відбувається, якщо підрядка знаходиться в рядку більше одного разу?
йошизеррі

@yoshiserry якщо ви хочете позицію substringв string, то ви хочете використовувати йо string.index
МАРКОС

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

(До речі, намагайтеся не називати змінну string, оскільки існує стандартна бібліотека Python з тим самим іменем. Ви можете збити з пантелику людей, якщо це зробите у великому проекті, тому уникайте таких зіткнень - це добра звичка потрапляти.)


Не тільки плутати, але і порушувати все, що посилається на рядок після цієї точки.
rplnt

13

Якщо ви шукаєте більше, ніж True / False, вам найкраще використовувати модуль повторень, наприклад:

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() поверне рядок "будь ласка, допоможіть мені".


1
Гарна порада щодо регулярних пошуків виразів.
Randall Cook

на більш легкій ноті. якщо ви намагаєтесь щось вирішити регулярним виразом, ви намагаєтеся вирішити дві проблеми.
Hasan Iqbal

10

Я думав, що я додам це у випадку, якщо ви дивитесь, як це зробити для технічного інтерв'ю, коли вони не хочуть, щоб ви використовували вбудовану функцію Python inабо find, що жахливо, але це трапляється:

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
Хороший приклад, але ваш ідентифікатор неправильний. А для прискорення речей я б перевірив if len(substring) > len(string) return Falseтакож, що діапазон циклу повинен бути краще, range(len(string)-len(substring))тому що ви не знайдете три буквеного слова в останніх двох літерах рядка. (Економить кілька повторень).
AnyOneElse

9

Люди згадували string.find(), string.index()і string.indexOf()в коментарях, і я їх підсумовую тут (згідно з документацією Python ):

Перш за все не існує string.indexOf()методу. Посилання, розміщене Deviljho, показує, що це функція JavaScript.

По-друге, string.find()і string.index()фактично повернути індекс підрядки. Єдина відмінність полягає в тому, як вони обробляють ситуацію з підрядкою, яку не знайдено: string.find()повертається -1під час string.index()підвищення ValueError.


5

Ви також можете спробувати метод find (). Він визначає, чи відбувається рядковий рядок в рядку або в підрядку рядка.

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

знайти підрядку 'bob' у заданому рядку.
avina k

0

Також можна використовувати цей метод

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

0

введіть тут опис зображення

Замість використання find (), одним із найпростіших способів є використання "in", як зазначено вище.

якщо 'підрядка' присутня в 'str', тоді, якщо частина буде виконуватися в іншому випадку, буде виконуватися частина.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.