Python - регулярное выражение - расщепление строки перед словом - PullRequest
2 голосов
/ 15 июля 2011

Я пытаюсь разбить строку в 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 ]

4 голосов
/ 15 июля 2011

использование регулярного выражения для разбиения вашей строки кажется немного излишним: метод string 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']

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

2 голосов
/ 15 июля 2011

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

0 голосов
/ 24 августа 2017

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

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 ...']
0 голосов
/ 15 июля 2011
in_str = "path:bte00250 Alanine, aspartate and glutamate metabolism path:bte00330 Arginine and proline metabolism"
in_list = in_str.split('path:')
print ",path:".join(in_list)[1:]
...