Рубрики
Без рубрики

Как найти несколько вхождений строки в строке в Python?

Состав задачи: дан более длинная строка и короче строка. Как найти все вхождения более короткой строки в дольше? Рассмотрим следующий пример: более длинная строка: «Финансовы изучают Python с строкой Finxter’Shorter: ‘finxter’result: [‘ finxter ‘,’ finxter ‘] необязательно, вы также можете напечатать положение, где возникает более короткая строка в дольше … Как найти несколько вхождений строки в строке в Python? Прочитайте больше “

Автор оригинала: Chris.

Проблема формулировки : Учитывая более длинную строку и более короткую строку. Как найти все вхождения более короткой строки в дольше?

Рассмотрим следующий пример:

  • Длинная струна : Финансовы изучают Python с Finxter '
  • Короче строка: 'Finxter'
  • Результат : ['Finxter', 'finxter']

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

  • Результат 2 : [(0, 'finxter'), (27, 'finxter')]]

Метод 1: Regex Re.finditer ()

Чтобы получить все вхождения шаблона в данной строке, вы можете использовать метод регулярного выражения Re.finditer (шаблон, строка) Отказ Результатом является неразмерный для Соответствующие объекты -Вы можете получить индексы совпадения с использованием Match.Start () и Match.end () Функции.

import re
s = 'Finxters learn Python with Finxter'
pattern = 'Finxter'

# Method 1: re.finditer
for m in re.finditer(pattern, s):
    print(pattern, 'matched from position', m.start(), 'to', m.end())

Вывод:

Finxter matched from position 0 to 7
Finxter matched from position 27 to 34

Метод 2: Re.Finditer () + Понимание списка

Чтобы получить шаблон строки, начать индекс и завершить индекс матча на Список кортежи Вы можете использовать следующие одноклассник на основе Понимание списка : [(Pattern, M.start (), M.end ()) для M в Re.Finditer (Pattern, S)] Отказ

import re
s = 'Finxters learn Python with Finxter'
pattern = 'Finxter'

# Method 2: re.finditer + list comprehension
l = [(pattern, m.start(), m.end())for m in re.finditer(pattern, s)]
print(l)

Вывод:

[('Finxter', 0, 7), ('Finxter', 27, 34)]

Способ 3: NO-REGEX, рекурсивное, перекрытие

Следующий метод основан на Рекурсия И это не требует внешней библиотеки. Идея состоит в том, чтобы неоднократно находить следующее возникновение шаблона подстроки в строке и вызовов один и тот же метод рекурсивно на более короткой движущейся строке начальной позиции вправо, пока не найдено совпадение. Все найденные спички подстроки накапливаются в переменной ACC Как вы проходите через рекурсионные звонки.

s = 'Finxters learn Python with Finxter'
pattern = 'Finxter'

# Method 3: recursive, without regex
def find_all(pattern, # string pattern
             string, # string to be searched
             start=0, # ignore everything before start
             acc=[]): # All occurrences of string pattern in string

    # Find next occurrence of pattern in string
    i = string.find(pattern, start)
    
    if i == -1:
        # Pattern not found in remaining string
        return acc
    
    return find_all(pattern, string, start = i+1,
                    acc = acc + [(pattern, i)]) # Pass new list with found pattern

l = find_all(pattern, s)
print(l)

Вывод:

[('Finxter', 0), ('Finxter', 27)]

Обратите внимание, что этот метод также находит перекрывающиеся совпадения – в отличие от методов Regex, которые потребляют все частично сопоставленные подстроки.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

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

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Ресурсы : https://stackoverflow.com/questions/3873361/finding-multiple-occurrences-of-a-string-within-a-string-in-nypython.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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