Python – регулярное выражение – разбиение строки перед словом

Я пытаюсь разделить строку на python перед определенным словом. Например, я хотел бы разбить следующую строку перед "path:" .

  • разделите строку перед "path:"
  • вход: "path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism"
  • выход: ['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism']

я пытался

 rx = re.compile("(:?[^:]+)") rx.findall(line) 

Это нигде не разбивает строку. Проблема в том, что значения после "path:" никогда не будут известны, чтобы указать целое слово. Кто-нибудь знает как это сделать?

4 Solutions collect form web for “Python – регулярное выражение – разбиение строки перед словом”

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

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

также, используйте правильное регулярное выражение для расщепления:

 >>> line = 'path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism' >>> re.split(' (?=path:)', line) ['path:bte00250 Alanine, aspartate and glutamate metabolism', 'path:bte00330 Arginine and proline metabolism'] 

группа (?=...) – это выражение lookahead: выражение соответствует пробелу (обратите внимание на пробел в начале выражения), за которым следует строка 'path:' , не потребляя то, что следует за пространством.

Вы могли бы сделать ["path:"+s for s in line.split("path:")[1:]] вместо использования регулярного выражения. (обратите внимание, что мы пропускаем первое совпадение, у которого нет префикса «путь:».

 in_str = "путь: bte00250 Путь метаболизма аланина, аспартата и глутамата: bte00330 Аргинин и пролиновый метаболизм"
 in_list = in_str.split ('путь:')
 print ", path:". join (in_list) [1:]

Это можно сделать без регулярных выражений. С учетом строки:

 s = "path:bte00250 Alanine, aspartate ... path:bte00330 Arginine and ..." 

Мы можем временно заменить искомое слово на местозаполнитель. Заполнитель – это единственный символ, который мы используем для разделения:

 word, placeholder = "path:", "|" s = s.replace(word, placeholder).split(placeholder) s # ['', 'bte00250 Alanine, aspartate ... ', 'bte00330 Arginine and ...'] 

Теперь, когда строка разделена, мы можем присоединить исходное слово к каждой подстроке, используя понимание списка:

 ["".join([word, i]) for i in s if i] # ['path:bte00250 Alanine, aspartate ... ', 'path:bte00330 Arginine and ...'] 
  • Строка Python для unicode
  • Отображение символов юникода с использованием python
  • Частоты подсчета Pandas в пределах ряда str
  • Как я могу печатать литеральные фигуры в фигурных скобках в строке python, а также использовать .format на нем?
  • Хороший способ превратить длинные строки в новую строку в Python?
  • Передача строки в библиотеку Fortran с использованием ctypes и Python
  • Строка печати Python в текстовый файл
  • Python positive-lookbehind split variable-width
  •  
    Interesting Posts for Van-Lav

    Как удалить отдельные пиксели на границах капли?

    Добавление цветной панели в pcolormesh с полярной проекцией

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

    Выполнять задачу сразу после возвращения JSON

    Как я могу получить доступ к модулю matlab / октавы из python?

    Можно ли автогенерировать привязки Cython вокруг большой, существующей библиотеки C?

    DatabaseError: ORA-00911: недопустимый символ

    Отклик на конец колбы и продолжить обработку

    Где находится NoneType, расположенный в Python 3.x?

    Кто-нибудь использует мета-мета-классы / мета-мета-мета-классы в Python / других языках?

    Использование словаря в качестве оператора switch в Python

    Внешние переменные в лямбда-функциях в Python

    Почему процесс демонстрации многопроцессорности Python не печатает на стандартный вывод?

    Аутентификация на токенах в Flask

    Использовать строковую переменную ** kwargs как именованный аргумент

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