Как определить, находится ли подстрока в другой строке

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
MarcoS
источник
10
черт возьми, питон слишком силен, я думал, что для этого нужна функция, но это встроенная функция Оо
windsound
Я просто изучал JS после изучения Python, для этого вам нужно было бы добавить множество операторов if else и других вещей. Итак, я просто хотел напомнить себе, как это делается в Python, этот ответ заставил меня сказать себе: «Конечно!» Я имею в виду, что такие вещи в Python настолько тривиальны, что вы никогда не задумываетесь о них! : P
Games Brainiac
@GamesBrainiac Собственно, сделать то же самое в JS просто string.indexOf(substring) != -1, подробнее здесь
LasagnaAndroid
Как только вы обнаружите, что в строке существует подстрока yes, как узнать, в какой позиции находится строка, и что произойдет, если подстрока находится в строке более одного раза?
yoshiserry
@yoshiserry, если вам нужна позиция substringin string, тогда вы хотите, чтобы вы использовали string.index
MarcoS
21
foo = "blahblahblah"
bar = "somethingblahblahblahmeep"
if foo in bar:
    # do something

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

Янтарь
источник
Не только запутать, но и сломать все, что ссылается на строку после этой точки.
rplnt 09
13

Если вы ищете больше, чем True / False, вам лучше всего подходит модуль re, например:

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
на более легкой ноте. Если вы пытаетесь решить что-то с помощью регулярного выражения, вы пытаетесь решить две проблемы.
Хасан Икбал
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
QueenJolene
источник
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 (). Он определяет, встречается ли строка str в строке или в подстроке строки.

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)))
jackotonye
источник
0

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

Вместо использования find (), одним из простых способов является использование 'in', как указано выше.

если 'substring' присутствует в 'str', тогда, если часть будет выполняться, иначе будет выполняться часть else.

Dcoder14
источник