Контекстно-зависимое разделение строк с сохранением разделителей.
Вопрос
У меня есть строка вида «foo-bar-1.23-4», и мне нужно разделить ее на первый дефис, за которым следует цифра, чтобы результат был ['foo-bar', '1.23-4'].Я пробовал следующее:
>>> re.split('-\d', 'foo-bar-1.23-4', 1)
['foo-bar', '.23-4']
и
>>> re.split('-(\d)', 'foo-bar-1.23-4', 1)
['foo-bar', '1', '.23-4']
с неоптимальными результатами.Есть ли однострочник, который даст мне то, что я хочу, без необходимости смешивать разделитель с последним элементом?
Решение
Вы были очень близки, попробуйте это:
re.split('-(?=\d)', 'foo-bar-1.23-4', 1)
Я использую позитивный прогноз для этого - в основном я сопоставляю тире, за которым сразу следует числовой символ.
Другие советы
re.split('-(?=\d)', 'foo-bar-1.23-4', 1)
С использованием смотреть вперед, именно это и сделал Эндрю, но опередил меня на минуту...:-)
Будет ли работать позитивный прогноз?
re.split('-?=\d', 'foo-bar-1.23-4', 1)
Не уверен, что вам нужны (и) окружающие просмотр вперед, но попробуйте.
Не связан с StackOverflow