Страницы

Поиск по вопросам

вторник, 7 мая 2019 г.

Python, разделение строки по символам через метод re.split

Необходимо разделить входящую строку по числам и буквам, например:
s = "k10Z18i13Q19u" a = re.split("(\d*)", s)
На выходе получим:
['k', '10', 'Z', '18', 'i', '13', 'Q', '19', 'u']
Но так же получим ошибку:
FutureWarning: split() requires a non-empty pattern match. return _compile(pattern, flags).split(string, maxsplit)
Данный метод очень подходит для решения моей задачи, но не пойму, отчего ошибки. Именно шаблон для разделения строки (\d*) взял из чужого решения, но не знаю как именно он работает, не смог найти описания. Можете подсказать, что делаю не так или каким методом лучше решить данную задачу?


Ответ

Замените (\d*) на (\d+)
Поясню что не так: (\d*) подразумевает ноль или более цифр. То есть пустым разделитель тоже может быть. Если это учитывать, то ваш результат мог быть и таким:
['', 'k', '10', 'Z', '18', 'i', '13', 'Q', '19', 'u', '']
Также если бы у вас были две буквы подряд, то между ними тоже могла бы "найтись" пустая строка. Текущая реализация этого метода не находит пустые подстроки, которые могут подходить под регулярное выражение. Однако в будущем планируется это реализовать, поэтому вы получаете FutureWarning. Вас предупреждают, что если вы ничего не измените, после обновления вас может ожидать сюрприз.
См. также re.split

Комментариев нет:

Отправить комментарий