Проблема формулировки : Учитывая более длинную строку и более короткую строку. Как найти все вхождения более короткой строки в дольше?
Рассмотрим следующий пример:
- Длинная струна :
Финансовы изучают 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» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.
Присоединяйтесь к свободному вебинару сейчас!
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.