我需要解析这个文本。
当给定一个文本时,例如:
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']我该怎么办?
发布于 2014-11-24 00:32:43
您的输入文本包含U+2013 EN DASH字符和U+002D HYPHEN-MINUS (ASCII破折号),这些字符被编码为UTF-8。
您可以先替换这些连字符:
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']发布于 2014-11-24 00:21:52
您可以使用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)发布于 2014-11-24 00:35:41
请注意,–是一个unicode,而-不是,所以如果你想使用split(),你需要在两个时间内完成:
>>> 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']https://stackoverflow.com/questions/27091145
复制相似问题