Контекстно-зависимое разделение строк с сохранением разделителей.

StackOverflow https://stackoverflow.com/questions/1041600

  •  22-07-2019
  •  | 
  •  

Вопрос

У меня есть строка вида «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)

Не уверен, что вам нужны (и) окружающие просмотр вперед, но попробуйте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top