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

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

Например:

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 
  • Python Lambdas и переменные привязки
  • Python. Какая польза от True?
  • как различать метод и атрибут в python по имени
  • Преобразует ли enumerate () объект-генератор?
  • Импорт каталога в pycharm
  • Должно ли мое приложение по умолчанию развертываться на appspot.com?
  • Что такое питоновский способ реализации парсера / замены css
  • Как создать цикл for с динамическим диапазоном?
  •  
    Interesting Posts for Van-Lav

    слоты разъединения Pyqt. Новый стиль

    Представление Python

    Python: могу ли я иметь список с именованными индексами?

    Использование и перемещение виджетов / кнопок в Kivy

    Почему создание этого memoryview повышает значение ValueError только при назначении переменной?

    Как повысить производительность этой счетной программы?

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

    Статический файл Django и nginx

    DatabaseSessionIsOver с Pony ORM из-за ленивой загрузки?

    Ошибка при упаковке модуля keyring с PY2APP на MAC OSX

    Ошибка ввода типа с помощью numpy.take

    django – преобразовать список обратно в запрос

    Как я могу использовать Python NLTK для определения совпадений между одиночными символами?

    Matplotlib matshow со многими строковыми метками

    Как построить несколько графиков плотности на одном и том же рисунке в python

    Python - лучший язык программирования в мире.