首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python string.split()函数在Qt中的复制行为

Python string.split()函数在Qt中的复制行为
EN

Stack Overflow用户
提问于 2016-04-17 11:40:10
回答 2查看 296关注 0票数 1

我目前正在尝试在Qt中准确地复制Python split()函数(默认版本,没有任何参数)的行为。

有人告诉我,默认分隔符是任意数量的CR/LF/TAB符号,因此我尝试使用以下分隔符:

代码语言:javascript
运行
复制
s_body.split(QRegExp("[\r\n\t ]+"), QString::SkipEmptyParts);

然而,这并不能精确地复制它的行为。

如果我在大约4兆字节的文本上运行它,并计算唯一单词的数量,我得到133293。但是,如果我使用Python函数执行相同的操作,结果将变为133367 -因此仍然存在问题。

任何关于如何解决这个问题的反馈都将非常受欢迎。

EN

回答 2

Stack Overflow用户

发布于 2016-04-17 11:56:04

我的猜测是Python不会跳过空字符串,它们会考虑到差异。如果您希望您的函数模仿Python的功能,您可以选择包含空字符串,或者如果您希望获得所实现的行为,您可以在Python中编写s_body.split();如果没有参数,它将去掉非空格字符之间的所有空格,这意味着您不会得到任何空字符串。

票数 0
EN

Stack Overflow用户

发布于 2016-04-18 04:59:00

使用unicode字符串,python的split()将很自然地拆分到所有unicode空格字符集,而不仅仅是弱小的ascii集:

代码语言:javascript
运行
复制
>>> s = '\t_\n_\x0b_\x0c_\r_ _\x85_\xa0_\u1680_\u2000_\u2001_\u2002_\u2003_\u2004_\u2005_\u2006_\u2007_\u2008_\u2009_\u200a_\u2028_\u2029_\u202f_\u205f_\u3000_'
>>> len(s)
50
>>> len(s.split())
25
>>> ''.join(s.split())
'_________________________'

现在让我们看看Qt做了什么(使用PyQt4):

代码语言:javascript
运行
复制
>>> qs = QString(s)
>>> r = qs.split(QRegExp('\\s+'), QString.SkipEmptyParts)
>>> r.count()
24
>>> str(r.join(''))
'______\x85___________________'

所以,差不多就是这样了,但是由于某些原因,U+0085 NEL (Next Line)在Qt4中没有被识别为空格--但这很容易补救:

代码语言:javascript
运行
复制
>>> r = qs.split(QRegExp('[\\s\x85]+'), QString.SkipEmptyParts)
>>> r.count()
25
>>> str(r.join(''))
'_________________________'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36672419

复制
相关文章

相似问题

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