Содержание

Python: поиск подстроки, операции со строками. Как выполнять поиск в строке Python?

В этой статье поговорим про строки в Python, особенности поиска, а также о том, как искать подстроку или символ в строке. Но сначала давайте вспомним основные методы для обработки строк в Python: • isalpha(str): если строка в Python включает в себя лишь алфавитные символы, возвращается True; • islower(str): True возвращается, если строка включает лишь символы в нижнем регистре; • isupper(str): True, если символы строки в Python находятся в верхнем регистре; • startswith(str): True, когда строка начинается с подстроки str; • isdigit(str): True, когда каждый символ строки — цифра; • endswith(str): True, когда строка в Python заканчивается на подстроку str; • upper(): строка переводится в верхний регистр; • lower(): строка переводится в нижний регистр; • title(): для перевода начальных символов всех слов в строке в верхний регистр; • capitalize(): для перевода первой буквы самого первого слова строки в верхний регистр; • lstrip(): из строки в Python удаляются начальные пробелы; • rstrip(): из строки в Python удаляются конечные пробелы; • strip(): из строки в Python удаляются и начальные, и конечные пробелы; • rjust(width): когда длина строки меньше, чем параметр width, слева добавляются пробелы, строка выравнивается по правому краю; • ljust(width): когда длина строки в Python меньше, чем параметр width, справа от неё добавляются пробелы для дополнения значения

width, при этом происходит выравнивание строки по левому краю; • find(str[, start [, end]): происходит возвращение индекса подстроки в строку в Python. В том случае, если подстрока не найдена, выполняется возвращение числа -1; • center(width): когда длина строки в Python меньше, чем параметр width, слева и справа добавляются пробелы (равномерно) для дополнения значения width, причём происходит выравнивание строки по центру; • split([delimeter[, num]]): строку в Python разбиваем на подстроки в зависимости от разделителя; • replace(old, new[, num]): в строке одна подстрока меняется на другую; • join(strs): строки объединяются в одну строку, между ними вставляется определённый разделитель.

Обрабатываем строку в Python

Представим, что ожидается ввод числа с клавиатуры. Перед преобразованием введенной нами строки в число можно легко проверить, введено ли действительно число. Если это так, выполнится операция преобразования. Для обработки строки используем такой метод в Python, как isnumeric():

string = input("Введите какое-нибудь число: ")
if string.isnumeric():
    number = int(string)
    print(number)

Следующий пример позволяет удалять пробелы в конце и начале строки:

string = "   привет мир!  "
string = string. strip()
print(string)           # привет мир!

Так можно дополнить строку пробелами и выполнить выравнивание:

print("iPhone 7:", "52000".rjust(10))
print("Huawei P10:", "36000".rjust(10))

В консоли Python будет выведено следующее:

iPhone 7:      52000
Huawei P10:      36000

Поиск подстроки в строке

Чтобы в Python выполнить поиск в строке, используют метод find(). Он имеет три формы и возвращает индекс 1-го вхождения подстроки в строку: • find(str): поиск подстроки str производится с начала строки и до её конца; • find(str, start): с помощью параметра start задаётся начальный индекс, и именно с него и выполняется поиск; • find(str, start, end): посредством параметра end задаётся конечный индекс, поиск выполняется до него.

Когда подстрока не найдена, метод возвращает -1:

    welcome = "Hello world! Goodbye world!"
index = welcome.find("wor")
print(index)       # 6
# ищем с десятого индекса
index = welcome.
find("wor",10) print(index) # 21 # ищем с 10-го по 15-й индекс index = welcome.find("wor",10,15) print(index) # -1

Замена в строке

Чтобы в Python заменить в строке одну подстроку на другую, применяют метод replace(): • replace(old, new): подстрока old заменяется на new; • replace(old, new, num): параметр num показывает, сколько вхождений подстроки old требуется заменить на new.

Пример замены в строке в Python:

    phone = "+1-234-567-89-10"
# дефисы меняются на пробелы
edited_phone = phone.replace("-", " ")
print(edited_phone)     # +1 234 567 89 10
# дефисы удаляются
edited_phone = phone.replace("-", "")
print(edited_phone)     # +12345678910
# меняется только первый дефис
edited_phone = phone.replace("-", "", 1)
print(edited_phone)     # +1234-567-89-10

Разделение на подстроки в Python

Для разделения в Python используется метод split(). В зависимости от разделителя он разбивает строку на перечень подстрок. В роли разделителя в данном случае может быть любой символ либо последовательность символов. Этот метод имеет следующие формы: • split(): в роли разделителя применяется такой символ, как пробел; • split(delimeter): в роли разделителя применяется delimeter

; • split(delimeter, num): параметром num указывается, какое количество вхождений delimeter применяется для разделения. При этом оставшаяся часть строки добавляется в перечень без разделения на подстроки.

Соединение строк в Python

Рассматривая простейшие операции со строками, мы увидели, как объединяются строки через операцию сложения. Однако есть и другая возможность для соединения строк — метод join():, объединяющий списки строк. В качестве разделителя используется текущая строка, у которой вызывается этот метод:

words = ["Let", "me", "speak", "from", "my", "heart", "in", "English"]
# символ разделителя - пробел
sentence = " ".join(words)
print(sentence)  # Let me speak from my heart in English
# символ разделителя - вертикальная черта
sentence = " | ".join(words)
print(sentence)  # Let | me | speak | from | my | heart | in | English

А если вместо списка в метод join передать простую строку, разделитель будет вставляться уже между символами:

word = "hello"
joined_word = "|". join(word)
print(joined_word)      # h|e|l|l|o

Python | Основные методы строк

Последнее обновление: 07.12.2022

Рассмотрим основные методы строк, которые мы можем применить в приложениях:

  • isalpha(): возвращает True, если строка состоит только из алфавитных символов

  • islower(): возвращает True, если строка состоит только из символов в нижнем регистре

  • isupper(): возвращает True, если все символы строки в верхнем регистре

  • isdigit(): возвращает True, если все символы строки — цифры

  • isnumeric(): возвращает True, если строка представляет собой число

  • startswith(str): возвращает True, если строка начинается с подстроки str

  • endswith(str): возвращает True, если строка заканчивается на подстроку str

  • lower(): переводит строку в нижний регистр

  • upper(): переводит строку в вехний регистр

  • title(): начальные символы всех слов в строке переводятся в верхний регистр

  • capitalize(): переводит в верхний регистр первую букву только самого первого слова строки

  • lstrip(): удаляет начальные пробелы из строки

  • rstrip(): удаляет конечные пробелы из строки

  • strip(): удаляет начальные и конечные пробелы из строки

  • ljust(width): если длина строки меньше параметра width, то справа от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по левому краю

  • rjust(width): если длина строки меньше параметра width, то слева от строки добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по правому краю

  • center(width): если длина строки меньше параметра width, то слева и справа от строки равномерно добавляются пробелы, чтобы дополнить значение width, а сама строка выравнивается по центру

  • find(str[, start [, end]): возвращает индекс подстроки в строке. Если подстрока не найдена, возвращается число -1

  • replace(old, new[, num]): заменяет в строке одну подстроку на другую

  • split([delimeter[, num]]): разбивает строку на подстроки в зависимости от разделителя

  • partition(delimeter): разбивает строку по разделителю на три подстроки и возвращает кортеж из трех элементов — подстрока до разделителя, разделитель и подстрока после разделителя

  • join(strs): объединяет строки в одну строку, вставляя между ними определенный разделитель

Например, если мы ожидаем ввод с клавиатуры числа, то перед преобразованием введенной строки в число можно проверить, с помощью метода isnumeric() введено ли в действительности число, и если так, то выполнить операцию преобразования:


string = input("Введите число: ")
if string.isnumeric():
    number = int(string)
    print(number)

Проверка, начинается или оканчивается строка на определенную подстроку:


file_name = "hello. py"

starts_with_hello = file_name.startswith("hello")   # True
ends_with_exe = file_name.endswith("exe")           # False

Удаление пробелов в начале и в конце строки:


string = "   hello  world!  "
string = string.strip()
print(string)           # hello  world!

Дополнение строки пробелами и выравнивание:


print("iPhone 7:", "52000".rjust(10))
print("Huawei P10:", "36000".rjust(10))

Консольный вывод:


iPhone 7:      52000
Huawei P10:      36000

Поиск в строке

Для поиска подстроки в строке в Python применяется метод find(), который возвращает индекс первого вхождения подстроки в строку и имеет три формы:

  • find(str): поиск подстроки str ведется с начала строки до ее конца

  • find(str, start): параметр start задает начальный индекс, с которого будет производиться поиск

  • find(str, start, end): параметр end задает конечный индекс, до которого будет идти поиск

Если подстрока не найдена, метод возвращает -1:


welcome = "Hello world! Goodbye world!"
index = welcome. find("wor")
print(index)       # 6

# поиск с 10-го индекса
index = welcome.find("wor",10)
print(index)       # 21

# поиск с 10 по 15 индекс
index = welcome.find("wor",10,15)
print(index)       # -1

Замена в строке

Для замены в строке одной подстроки на другую применяется метод replace():

  • replace(old, new): заменяет подстроку old на new

  • replace(old, new, num): параметр num указывает, сколько вхождений подстроки old надо заменить на new. По умолчанию num равно -1, что соответствует первой версии метода и приводит к замене всех вхождений.


phone = "+1-234-567-89-10"

# замена дефисов на пробел
edited_phone = phone.replace("-", " ")
print(edited_phone)     # +1 234 567 89 10

# удаление дефисов
edited_phone = phone.replace("-", "")
print(edited_phone)     # +12345678910

# замена только первого дефиса
edited_phone = phone. replace("-", "", 1)
print(edited_phone)     # +1234-567-89-10

Разделение на подстроки

Метод split() разбивает строку на список подстрок в зависимости от разделителя. В качестве разделителя может выступать любой символ или последовательность символов. Данный метод имеет следующие формы:

  • split(): в качестве разделителя используется пробел

  • split(delimeter): в качестве разделителя используется delimeter

  • split(delimeter, num): параметр num указывает, сколько вхождений delimeter используется для разделения. Оставшаяся часть строки добавляется в список без разделения на подстроки


text = "Это был огромный, в два обхвата дуб, с обломанными ветвями и с обломанной корой"
# разделение по пробелам
splitted_text = text.split()
print(splitted_text)
print(splitted_text[6])     # дуб,

# разбиение по запятым
splitted_text = text. split(",")
print(splitted_text)
print(splitted_text[1])     # в два обхвата дуб

# разбиение по первым пяти пробелам
splitted_text = text.split(" ", 5)
print(splitted_text)        
print(splitted_text[5])     # обхвата дуб, с обломанными ветвями и с обломанной корой

Еще один метод — partition() разбивает строку по разделителю на три подстроки и возвращает кортеж из трех элементов — подстрока до разделителя, разделитель и подстрока после разделителя:


text = "Это был огромный, в два обхвата дуб, с обломанными ветвями и с обломанной корой"
text_parts = text.partition("дуб")
print(text_parts)
# ('Это был огромный, в два обхвата ', 'дуб', ', с обломанными ветвями и с обломанной корой')

Если разделитель с строке не найден, то возвращается кортеж с одной строкой.

Соединение строк

При рассмотрении простейших операций со строками было показано, как объединять строки с помощью операции сложения. Другую возможность для соединения строк представляет метод join(): он объединяет список строк. Причем текущая строка, у которой вызывается данный метод, используется в качестве разделителя:


words = ["Let", "me", "speak", "from", "my", "heart", "in", "English"]

# разделитель - пробел
sentence = " ".join(words)
print(sentence)  # Let me speak from my heart in English

# разделитель - вертикальная черта
sentence = " | ".join(words)
print(sentence)  # Let | me | speak | from | my | heart | in | English

Вместо списка в метод join можно передать простую строку, тогда разделитель будет вставляться между символами этой строки:


word = "hello"
joined_word = "|".join(word)
print(joined_word)      # h|e|l|l|o

НазадСодержаниеВперед

Питон | Проверка наличия подстроки в заданной строке

В этой статье мы расскажем, как проверить, содержит ли строка Python другую строку или подстроку в Python. Учитывая две строки, проверьте, есть ли подстрока в данной строке или нет.

 Пример 1: Ввод: Подстрока = "выродки"
           String="гики для гиков"
Выход: да
Пример 2: Ввод: Подстрока = "выродок"
           String="гики для гиков"
Вывод: да 

Есть ли в Python строка, содержащая метод подстроки

Да, проверка подстроки — одна из наиболее часто используемых задач в Python. Python использует множество методов для проверки строки, содержащей подстроку, например, find(), index(), count() и т. д. Наиболее эффективным и быстрым методом является использование оператора « в «, который используется в качестве оператора сравнения. . Здесь мы рассмотрим различные подходы, такие как:

  • Использование if… in 
  • Проверка с использованием метода split()
  • Использование метода find()
  • Использование метода count()
  • Использование метода index()
  • Использование магического класса __contains__.
  • Using regular expressions 

Method 1: Check substring using the if… in.

Python3

MyString1 = "A geek in need is a geek indeed"

если "нужно" в MyString1:

     печать ( "Да! Он присутствует в строке" )

Else :

Print .

Выход

 Да! он присутствует в строке 

Временная сложность: O(1)

Вспомогательный пробел: O(1)

Метод 2: Проверка подстроки с помощью метода split()

Проверка наличия подстроки в заданной строке без использования какой-либо встроенной функции. Сначала разбейте данную строку на слова и сохраните их в переменной s, затем, используя условие if, проверьте, присутствует ли подстрока в данной строке или нет.

Python3

Строка = "Гики для гикс0003

 

s = string.split()

 

if substring in s:

     print ( "yes" )

else :

     print ( "no" )

Output

 да 

Способ 3. Проверка подстроки с помощью метода find()

Мы можем итеративно проверять каждое слово, но Python предоставляет нам встроенную функцию find(), которая проверяет наличие подстроки в строке, т.е. делается в одну строку. Функция find() возвращает -1, если она не найдена, иначе она возвращает первое вхождение, поэтому с помощью этой функции эта проблема может быть решена.

Python3

9990

 

 

def check(string, sub_str):

     if (string.find(sub_str) = = - 1 ):

         print ( "NO" )

     else :

         print ( "YES" )

 

Строка = "Вундеркиды для фанатов"

= "ГИК"

9988 .
 YES 

Метод 4. Проверка подстроки с помощью метода count()

Вы также можете подсчитать количество вхождений определенной подстроки в строку, а затем использовать метод count() в Python. Если подстрока не найдена, то будет напечатано «да», иначе будет напечатано «нет».

Python3

DEF Проверка (S2, S1):

IF (с. print ( "YES" )

     else :

         print ( "NO" )

 

 

s2 = "A geek in need is a geek indeed"

s1 = "geeks"

check(s2, s1)

Вывод

 НЕТ 

Метод 5: Проверка подстроки с помощью метода index()

Метод . index() возвращает начальный индекс подстроки, переданной в качестве параметра. Здесь « подстрока ” is present at index 16.

Python3

any_string = "Geeks for Geeks substring "

start = 0

end = 1000

Печать (any_string.index ( 'Подстроение' , начало, конец))

Выход: 3

: 3 16999990

: 3 169919990

: 3

: 3

: 3

: 3

9008

Способ 6. Проверка подстроки с помощью магического класса «__contains__».

Строка Python __contains__(). Этот метод используется для проверки наличия строки в другой строке или нет.

Python3

a = [ 'Geeks-13' , 'for-56' , 'Geeks-78' , ' xyz-46' ]

на I в A:

IF I .__ Содержит __ ( . } содержит." )

Вывод

 Да! Компьютерщики-13 содержат.
Да! Выродки-78 содержат. 

Способ 7. Проверка подстроки с помощью регулярных выражений

RegEx можно использовать для проверки наличия в строке указанного шаблона поиска. В Python есть встроенный пакет re , который можно использовать для работы с регулярными выражениями.

Python3

import re

 

MyString1 = "A geek in need is a geek indeed"

MyString2 = "geeks"

 

IF RE.Search (MyString2, MyString1):

Печать ( "Да, строка '{0}' присутствует в строке '{1} 4040404040404040404040404040404040404. Формат (

MyString2, MyString1))

Else :

9. 9004. 'not String 9004.' not String 9004. 'not String 9004.' not String 9004. 'not String 9004.' not String 9004. 'not String 9004.' not String 9004. 'not String 9004.' not Strind 9004. '{1}' " . Формат (

MyString2, MyString1))

Выход

 NO, String 'Geeks' Is Not In String 'A Geeek Is Toper' A Toper 'Affee's Is Wealls' in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in in string 'in in in in in in in in in in in in in in in in worpl 

Метод: Использование понимания списка

Python3

S = "Гики для гисточек"

S2 9 = 39 9003 "

S2 = "

. 0040

print ([ "yes" if s2 in s else "no" ])

Output

 ['yes'] 

Method: Using lambda function

Python3

s = "geeks for geeks"

s2 = "geeks"

x = Список ( Фильтр ( Lambda x: (S2 в 9039.). ([ "yes" if x else "no" ])

Output

 ['yes'] 

Method: Using countof функция

Python3

import operator as op

s = "geeks for geeks"

s2 = "geeks"

print ([ "yes" if op. countOf(s.split(),s2)> 0 else "no" ])

Output

 ['yes'] 

Метод: Использование метода operator.contains()

Подход 

  1. Используется метод operator.contains() для проверки наличия14 подстроки 900 в строке 14. Условие является истинной печатью, да, в противном случае печать №

Python3

Импорт Оператор AS

S = "Geeks для Geeks" = "Geeks для Geeks" = "Geeks для0003

s2 = "geeks"

if (op. contains(s,s2)):

     print ( "yes" )

else :

     print ( "no" )

Output

 yes 

Time Complexity : O(N)

Вспомогательный пробел: O(1)

Метод: использование срезов

В этой реализации используется цикл для перебора всех возможных начальных индексов подстроки в строке, а затем используется срез для сравнения текущей подстроки с подстрокой. аргумент.

Если текущая подстрока соответствует аргументу подстроки, функция возвращает значение True. Если после проверки всех возможных начальных индексов подстрока не найдена, то функция возвращает False.

Python3

def is_substring(string, substring):

     for i in range ( len (string) - LEN (подстроение) + 1 ):

IF Строка I: I + 3904

040404040404040404

04444444904.40404040449. 404040404049.0040 = = substring:

             return True

     return False

string = "A geeks in need is a geek indeed"

substring = "geeks"

print (is_substring(string,substring))

Выход

 Истинно
 

Временная сложность: O(n*m) 

, где n — длина строкового аргумента, а m — длина подстроки. Это связано с тем, что функция использует цикл для перебора всех возможных начальных индексов подстроки в строке, а затем использует срез для сравнения текущей подстроки с аргументом подстроки. В худшем случае цикл будет повторяться n-m+1 раз, и каждая операция среза занимает O(m) времени, что приводит к общей временной сложности O((n-m+1)m) = O(nm) .

Вспомогательный пробел: O(1) 


Как проверить, содержит ли строка Python подстроку — настоящий Python

лучший способ проверить, содержит ли строка другую строку в Python.

Идентификация таких подстрок пригодится, когда вы работаете с текстовым содержимым из файла или после того, как вы получили пользовательский ввод. Вы можете выполнять различные действия в своей программе в зависимости от того, присутствует подстрока или нет.

В этом руководстве вы сосредоточитесь на самом Pythonic способе решения этой задачи, используя оператор членства в . Кроме того, вы узнаете, как идентифицировать правильные строковые методы для связанных, но разных вариантов использования.

Наконец, вы также узнаете, как найти подстроки в столбцах pandas . Это полезно, если вам нужно выполнить поиск данных из CSV-файла. Вы могли бы использовать подход, который вы узнаете в следующем разделе, но если вы работаете с табличные данные , лучше всего загрузить данные в pandas DataFrame и искать подстроки в pandas.

Как убедиться, что строка Python содержит другую строку

Если вам нужно проверить, содержит ли строка подстроку, используйте оператор принадлежности Python в . В Python это рекомендуемый способ подтверждения наличия подстроки в строке:

.

>>>

 >>> raw_file_content = """Привет и добро пожаловать.
... Это специальный скрытый файл с СЕКРЕТНЫМ секретом.
... Я не хочу раскрывать тебе Секрет,
...  но я хочу по секрету сказать вам, что он у меня есть."""
>>> "секрет" в raw_file_content
Истинный
 

Оператор членства в дает вам быстрый и удобный способ проверить, присутствует ли подстрока в строке. Вы можете заметить, что строка кода читается почти как английский язык.

Примечание: Если вы хотите проверить, является ли подстрока , а не в строке, вы можете использовать не в :

>>>

 >>> "secret" не в raw_file_content
ЛОЖЬ
 

Поскольку подстрока "секретная" присутствует в raw_file_content , оператор не в возвращает False .

При использовании в выражение возвращает логическое значение:

  • Истинно , если Python нашел подстроку
  • Ложь , если Python не нашел подстроку

Вы можете использовать этот интуитивно понятный синтаксис в условных операторах для принятия решений в вашем коде:

>>>

 >>> если "секрет" в raw_file_content:
. .. печать("Найдено!")
...
Найденный!
 

В этом фрагменте кода вы используете оператор принадлежности, чтобы проверить, является ли "secret" подстрокой raw_file_content . Если это так, то вы напечатаете сообщение на терминал. Любой код с отступом будет выполняться только в том случае, если проверяемая вами строка Python содержит предоставленную вами подстроку.

Примечание: Python всегда рассматривает пустые строки как подстроку любой другой строки, поэтому проверка на наличие пустой строки в строке возвращает True :

>>>

 >>> "" в "секрет"
Истинный
 

Это может показаться удивительным, поскольку Python считает строки emtpy ложными, но это крайний случай, о котором полезно помнить.

Оператор членства в — ваш лучший друг, если вам просто нужно проверить, содержит ли строка Python подстроку.

Однако что, если вы хотите узнать больше о подстроке? Если вы прочитаете текст, хранящийся в raw_file_content , то вы заметите, что подстрока встречается более одного раза и даже в разных вариациях!

Какие из этих вхождений нашел Python? Имеет ли значение заглавная буква? Как часто эта подстрока встречается в тексте? И каково расположение этих подстрок? Если вам нужен ответ на любой из этих вопросов, продолжайте читать.