python re.split()用空格,逗号和句点分隔,但不是在1,000或1.50的情况下

roh*_*nag 24 python regex

我想使用python re.split()通过空格,逗号和句点将字符串拆分为单个单词.但我不想"1,200"被分裂["1", "200"]["1.2"]分裂成["1", "2"].

l = "one two 3.4 5,6 seven.eight nine,ten"
Run Code Online (Sandbox Code Playgroud)

结果应该是 ["one", "two", "3.4", "5,6" , "seven", "eight", "nine", "ten"]

Joã*_*lva 52

使用负向前瞻和负面后瞻:

> 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']
Run Code Online (Sandbox Code Playgroud)

换句话说,您总是按\s(空格)分割,并且只有在没有跟随(?!\d)或前面(?<!\d)有数字时才用逗号和句点分隔.

演示.

编辑:根据@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']
Run Code Online (Sandbox Code Playgroud)

这将分裂"1.2,a,5"["1.2", "a", "5"].

演示.

  • 我认为OP实际上不想跟随*和*继续,而不是或者,所以它应该是`(?<!\ d)[.,] | [.,](?!\ d)`不是`(?< !\ d)[.](?!\ d)`.例如,我怀疑"1.2,a"应该变成`["1.2","a"]`. (5认同)