40

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

4

2 回答 2

69

使用负前瞻和负后瞻:

> 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)

演示

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

演示

于 2012-10-02T01:09:23.890 回答
3

因此,您希望在空格、逗号和不被数字包围的句点上进行拆分。这应该有效:

r" |(?<![0-9])[.,](?![0-9])"
于 2012-10-02T01:10:10.823 回答