我需要解析这个文本。
当给出例如文本时:
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']
我该怎么办?
答案 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]
将其用作
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']