Ответ 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.