Найти подпоследовательности строк в строках

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

Например:

a = 'abcde' b = 'ace' c = 'acb' 

Функция, о которой идет речь, должна возвращаться как b находящаяся в a , но не c .

Я попытался set(a) . пересечение (set (b)), и моя проблема заключается в том, что он возвращает c как находящийся в a .

3 Solutions collect form web for “Найти подпоследовательности строк в строках”

Вы можете превратить вашу ожидаемую последовательность в регулярное выражение:

 import re def sequence_in(s1, s2): """Does `s1` appear in sequence in `s2`?""" pat = ".*".join(s1) if re.search(pat, s2): return True return False # or, more compactly: def sequence_in(s1, s2): """Does `s1` appear in sequence in `s2`?""" return bool(re.search(".*".join(s1), s2)) a = 'abcde' b = 'ace' c = 'acb' assert sequence_in(b, a) assert not sequence_in(c, a) 

«ace» превращается в регулярное выражение «a. * c. * e», которое находит эти три символа в последовательности, с возможными промежуточными символами.

как насчет чего-то подобного …

 def issubstr(substr, mystr, start_index=0): try: for letter in substr: start_index = mystr.index(letter, start_index) + 1 return True except: return False 

или…

 def issubstr(substr, mystr, start_index=0): for letter in substr: start_index = mystr.find(letter, start_index) + 1 if start_index == 0: return False return True 
 def issubstr(s1, s2): return "".join(x for x in s2 if x in s1) == s1 >>> issubstr('ace', 'abcde') True >>> issubstr('acb', 'abcde') False 
  • Путаница о __get__ и __call__ в python
  • Найти слово infront и позади списка Python
  • Элемент Python ElementTree: элемент ElementTree vs root
  • как распечатать содержимое PYTHONPATH
  • Исходный список изменяется в python
  • Как отредактировать строку в середине txt-файла без перезаписи всего?
  • Разрешение отклонено при записи в файл в Python
  • Как получить самую старую задачу пользователя из API Asana?
  • Метод расширения для встроенных типов python!
  • Пересечение списка текстовых файлов с помощью python
  • Удаление записей из словаря на основе значений
  • Python - лучший язык программирования в мире.