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

时间:2012-10-02 01:02:02

标签: python regex

我想使用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"]

2 个答案:

答案 0 :(得分:47)

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

> 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

编辑:根据@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

答案 1 :(得分:3)

所以你想要分隔空格,以及没有数字包围的逗号和句号。这应该有效:

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