Примеры поиска строки в Python

Я пытаюсь найти несколько примеров, но безуспешно. Кто-нибудь знает примеры в сети? Я хотел бы знать, что он возвращает, когда не может найти, и как указать от начала до конца, что, я думаю, будет 0, -1.


person Joan Venge    schedule 23.03.2009    source источник
comment
Вы спрашиваете о docs.python.org/library/stdtypes.html#id4 ? Вы спрашиваете конкретно о методе поиска? docs.python.org/library/stdtypes.html#str.find   -  person S.Lott    schedule 23.03.2009
comment
Спасибо, да, просто метод поиска. Я нашел эту страницу, но нет примеров.   -  person Joan Venge    schedule 23.03.2009
comment
На странице написано -1. Что еще вам нужно было знать?   -  person S.Lott    schedule 23.03.2009
comment
Нет, я имею в виду, просто несколько примеров.   -  person Joan Venge    schedule 23.03.2009


Ответы (9)


вы также можете использовать str.index:

>>> 'sdfasdf'.index('cc')
Traceback (most recent call last):
  File "<pyshell#144>", line 1, in <module>
    'sdfasdf'.index('cc')
ValueError: substring not found
>>> 'sdfasdf'.index('df')
1
person SilentGhost    schedule 23.03.2009
comment
Почему вы предпочли бы одно другому? - person endolith; 08.11.2009
comment
он вызывает ошибку вместо возврата кода, который, на мой взгляд, более питонический. - person SilentGhost; 08.11.2009
comment
исключения не должны использоваться для управления потоком. поэтому используйте index() только в том случае, если совпадение не является ненормальным. - person aehlke; 05.07.2010
comment
@Wahnfrieden: использование исключения совершенно питонично. И уж точно не заслуживает минуса. - person SilentGhost; 05.07.2010
comment
@aehlke на самом деле, в Python использование исключений для управления потоком обычно и даже рекомендуется: than-permission-in-python-but-not-in-java" title="почему проще попросить прощения, чем разрешения в python, но не в java">stackoverflow.com/questions/6092992/ - person Rafael Almeida; 10.01.2012

Я не уверен, что вы ищете, вы имеете в виду find()?

>>> x = "Hello World"
>>> x.find('World')
6
>>> x.find('Aloha');
-1
person Paolo Bergantino    schedule 23.03.2009
comment
Спасибо, а что вы получаете, если не можете найти? - person Joan Venge; 23.03.2009
comment
Спасибо, а почему здесь -1, а не для индекса? Я думал, что python предпочитает исключения специальным возвращаемым значениям. - person Joan Venge; 23.03.2009
comment
Спасибо SilentGhost, воспользовался вашим методом. - person Joan Venge; 23.03.2009
comment
find и index — это одна и та же функциональность, но с разными результатами при отсутствии совпадений. В целом Python может предпочитать исключения, но многие пользователи ожидают, что также будет и метод поиска-индекса, не вызывающий исключения, тем более, что именно так это делается почти во всех других языках. - person bobince; 23.03.2009
comment
это отлично работает для меня - совершенно забыл, что 0 результатов на самом деле означает совпадение! - person Gordon; 07.10.2016
comment
мы можем использовать or здесь для ex- x.find (Добро пожаловать или добро пожаловать) - person Pooja Khatri; 23.03.2020

Из документации:

str.find(sub[, start[, end]])

Возвращает наименьший индекс в строке, где подстрока sub находится в срезе s[start:end]. Необязательные аргументы start и end интерпретируются как в нотации среза. Вернуть -1, если sub не найден.

Итак, несколько примеров:

>>> my_str = 'abcdefioshgoihgs sijsiojs '
>>> my_str.find('a')
0
>>> my_str.find('g')
10
>>> my_str.find('s', 11)
15
>>> my_str.find('s', 15)
15
>>> my_str.find('s', 16)
17
>>> my_str.find('s', 11, 14)
-1
person Phil H    schedule 23.03.2009

Честно говоря, это такая ситуация, когда я просто открываю Python в командной строке и начинаю возиться:

 >>> x = "Dana Larose is playing with find()"
 >>> x.find("Dana")
 0
 >>> x.find("ana")
 1
 >>> x.find("La")
 5
 >>> x.find("La", 6)
 -1

Интерпретатор Python упрощает подобные эксперименты. (То же самое касается других языков с аналогичным интерпретатором)

person Dana    schedule 23.03.2009
comment
IPython делает такие вещи еще лучше. - person endolith; 08.11.2009

Если вы хотите найти последний экземпляр строки в тексте, вы можете запустить rfind.

Пример:

   s="Hello"
   print s.rfind('l')

выход: 3

* импорт не требуется

Полный синтаксис:

stringEx.rfind(substr, beg=0, end=len(stringEx))
person LucianNovo    schedule 04.09.2012

find( sub[, start[, end]])

Возвращает наименьший индекс в строке, в которой найдена подстрока, так что подстрока содержится в диапазоне [начало, конец]. Необязательные аргументы start и end интерпретируются как в нотации среза. Вернуть -1, если подпрограмма не найдена.

Из документов.

person MarkusQ    schedule 23.03.2009

Попробуй это:

with open(file_dmp_path, 'rb') as file:
fsize = bsize = os.path.getsize(file_dmp_path)
word_len = len(SEARCH_WORD)
while True:
    p = file.read(bsize).find(SEARCH_WORD)
    if p > -1:
        pos_dec = file.tell() - (bsize - p)
        file.seek(pos_dec + word_len)
        bsize = fsize - file.tell()
    if file.tell() < fsize:
        seek = file.tell() - word_len + 1
        file.seek(seek)
    else:
        break
person Israel Alberto RV    schedule 28.09.2013

если x является строкой, и вы ищете y, который также является строкой, это два случая: case 1: y существует в x, поэтому x.find(y) = the индекс (позиция) y в x . случай 2: y не существует, поэтому x.find (y) = -1 означает, что y не найден в x.

person N.Elsayed    schedule 04.02.2018

Пытаться

myString = 'abcabc'
myString.find('a')

Это даст вам индекс!!!

person Dave Brown    schedule 30.09.2020
comment
Привет @Dave Brown, ты тестировал свой код? Я думаю, вы обнаружите, что он не работает так, как с отступом, потому что вы сделали опечатку. - person Exelian; 30.09.2020