Два очень близких регулярных выражения с проверочными утверждениями в Python - почему re.split () ведет себя по-разному? - PullRequest
2 голосов
/ 16 июля 2011

Я пытался ответить на этот вопрос , где ОП имеет следующую строку:

"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']

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

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

Однако, в этом ответе , ответчик получил его, поставив предварительное предположение с пробелом:

>>> 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']

Почему регулярное выражение работает с пробелами?Почему это не работает без пробелов?

1 Ответ

5 голосов
/ 16 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...