将文本拆分为' - '时错误的结果

时间:2014-11-23 16:16:33

标签: python string split

我需要解析这个文本。

当给出例如文本时:

line = "1,2,3–7,2,4–2,2,5-6,2,6-3,3,3–5,3,4–4,3,5"

使用split方法后我想要这个结果:

['1,2,3', '7,2,4', '2,2,5', '6,2,6', '3,3,3', '5,3,4', '4,3,5']

尝试时:

line.split('-')

我得到了这个结果:

['1,2,3\xe2\x80\x937,2,4\xe2\x80\x932,2,5', '6,2,6', '3,3,3\xe2\x80\x935,3,4\xe2\x80\x934,3,5']

我该怎么办?

3 个答案:

答案 0 :(得分:2)

您的输入文字包含U+2013 EN DASH个字符,以及编码为UTF-8的U+002D HYPHEN-MINUS(ASCII破折号)。

您可以先替换这些短划线字符:

line = line.replace(u'\u2013'.encode('utf8'), '-')

或者您可以使用正则表达式来分割任一字节序列:

import re
line = re.split(r'(?:-|\xe2\x80\x93)', line)

两者都假设您希望将输入保留为字节串,而不是解码为Unicode。

演示:

>>> line = "1,2,3–7,2,4–2,2,5-6,2,6-3,3,3–5,3,4–4,3,5"
>>> line.replace(u'\u2013'.encode('utf8'), '-')
'1,2,3-7,2,4-2,2,5-6,2,6-3,3,3-5,3,4-4,3,5'
>>> line.replace(u'\u2013'.encode('utf8'), '-').split('-')
['1,2,3', '7,2,4', '2,2,5', '6,2,6', '3,3,3', '5,3,4', '4,3,5']
>>> import re
>>> re.split(r'(?:-|\xe2\x80\x93)', line)
['1,2,3', '7,2,4', '2,2,5', '6,2,6', '3,3,3', '5,3,4', '4,3,5']

答案 1 :(得分:1)

您可以使用re.split

拆分

[^,\d]

See demo.

将其用作

line="1,2,3–7,2,4–2,2,5-6,2,6-3,3,3–5,3,4–4,3,5"

print re.split(r"[^\d,]",line)

答案 2 :(得分:0)

请注意,unicode-则不是,如果您想使用split(),则需要在2次内完成此操作:

>>> l=[]
>>> for i in line.split('–') : # or line.split('\xe2\x80\x93')
...    l.extend(i.split('-'))

>>> l
['1,2,3', '7,2,4', '2,2,5', '6,2,6', '3,3,3', '5,3,4', '4,3,5']