Python re.split() для разделения по пробелам, запятым и периодам, но не в таких случаях, как 1000 или 1.50

Я хочу использовать python re.split() для разделения строки на отдельные слова пробелами, запятыми и периодами. Но я не хочу, чтобы "1,200" разбивался на ["1", "200"] или ["1.2"], чтобы разбиться на ["1", "2"].

Пример

l = "one two 3.4 5,6 seven.eight nine,ten"

Результат должен быть ["one", "two", "3.4", "5,6" , "seven", "eight", "nine", "ten"]

Ответы

Ответ 1

Используйте отрицательный lookahead и отрицательный lookbehind:

> s = "one two 3.4 5,6 seven.eight nine,ten"
> parts = re.split('\s|(?<!\d)[,.](?!\d)', s)
['one', 'two', '3.4', '5,6', 'seven', 'eight', 'nine', 'ten']

Другими словами, вы всегда разбиваете на \s (пробелы) и разделяете только запятыми и периодами, если они не следуют (?!\d) или предшествуют (?<!\d) цифрой.

DEMO.

EDIT: согласно комментарию @verdesmarald, вы можете использовать следующее:

> s = "one two 3.4 5,6 seven.eight nine,ten,1.2,a,5"
> print re.split('\s|(?<!\d)[,.]|[,.](?!\d)', s)
['one', 'two', '3.4', '5,6', 'seven', 'eight', 'nine', 'ten', '1.2', 'a', '5']

Это разделит "1.2,a,5" на ["1.2", "a", "5"].

DEMO.

Ответ 2

Итак, вы хотите разбить на пробелы, а также на запятые и периоды, которые не окружены цифрами. Это должно работать:

r" |(?<![0-9])[.,](?![0-9])"