首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按“-”拆分文本时出现错误结果

按“-”拆分文本时出现错误结果
EN

Stack Overflow用户
提问于 2014-11-24 00:16:33
回答 3查看 274关注 0票数 0

我需要解析这个文本。

当给定一个文本时,例如:

代码语言:javascript
运行
复制
line = "1,2,3–7,2,4–2,2,5-6,2,6-3,3,3–5,3,4–4,3,5"

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

代码语言:javascript
运行
复制
['1,2,3', '7,2,4', '2,2,5', '6,2,6', '3,3,3', '5,3,4', '4,3,5']

尝试此操作时:

代码语言:javascript
运行
复制
line.split('-')

我得到的结果是:

代码语言:javascript
运行
复制
['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']

我该怎么办?

EN

回答 3

Stack Overflow用户

发布于 2014-11-24 00:32:43

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

您可以先替换这些连字符:

代码语言:javascript
运行
复制
line = line.replace(u'\u2013'.encode('utf8'), '-')

或者,您可以使用正则表达式对任何一个字节序列进行拆分:

代码语言:javascript
运行
复制
import re
line = re.split(r'(?:-|\xe2\x80\x93)', line)

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

演示:

代码语言:javascript
运行
复制
>>> 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']
票数 2
EN

Stack Overflow用户

发布于 2014-11-24 00:21:52

您可以使用re.split

按拆分

代码语言:javascript
运行
复制
[^,\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"

代码语言:javascript
运行
复制
print re.split(r"[^\d,]",line)
票数 1
EN

Stack Overflow用户

发布于 2014-11-24 00:35:41

请注意,是一个unicode,而-不是,所以如果你想使用split(),你需要在两个时间内完成:

代码语言:javascript
运行
复制
>>> 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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27091145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档