当前位置: 首页 > 面试题库 >

Python:按所有空格字符分割字符串

魏健柏
2023-03-14
问题内容

为了在python中用空格分割字符串,通常使用split不带参数的字符串方法:

>>> 'a\tb c\nd'.split()
['a', 'b', 'c', 'd']

但是昨天我碰到了一个在单词之间也使用零宽度空间的字符串。在将我的新知识变成了简短的黑魔法表演(在JavaScript众人中)之后,我想问一下如何更好地按所有空白字符进行分割,因为这样split做还不够:

>>> u'a\u200bc d'.split()
[u'a\u200bc', u'd']

UPD1

看来一般建议的解决方案sth都可以,但是取决于某些OS设置或Python编译选项。很高兴知道确定的原因(以及是否可以在Windows中打开设置)。

UPD2 cptphil找到了一个很好的链接,使所有内容都变得清晰:

因此,我就此问题与Unicode技术委员会联系,并迅速收到了回复。他们指出ZWSP曾被视为空白,但在Unicode 4.0.1中已更改

来自unicode网站的报价:

将U + 200B零宽度空间从Zs更改为Cf(2003.10.27)

使用U +
200B零宽度空间(ZWSP)一直存在问题。该字符的功能是允许在通常不允许的位置处换行,因此在功能上是具有Cf常规类别的格式字符。此行为已在Unicode标准中得到了很好的记录,并且该字符在Unicode字符数据库中不被视为空白字符。但是,由于历史原因,常规类别仍然是Zs(空格分隔符),这会导致字符被滥用。ZWSP也是唯一不是空格的Zs字符。常规类别可能导致对规则D13基本字符的误解,因为它允许ZWSP作为组合标记的基础。

建议将U + 200B的一般类别从Zs更改为Cf。

解决方法:已关闭。在Unicode版本4.0.1中,U + 200B的常规类别将从Zs更改为Cf。

更改随后反映在Python中。u'\u200B'.isspace()在Python 2.5.4和2.6.5中的结果是True,在Python
2.7.1中已经是False

对于其他空格字符,常规split就足够了:

>>> u'a\u200Ac'.split()
[u'a', u'c']

如果这还不够,请按照Gabi Purcaru以下建议一一添加字符。


问题答案:

编辑

事实证明\ u200b在技术上没有定义为空格,因此即使unicode标志打开,python也无法将其识别为匹配\ s。因此,必须将其视为非空白字符。

http://en.wikipedia.org/wiki/Whitespace_character#Unicode

http://bugs.python.org/issue13391

import re

re.split(ur"[\u200b\s]+", "some string", flags=re.UNICODE)


 类似资料:
  • 问题内容: 我从来不是一个正则表达式大师,所以我需要您的帮助!我有一个像这样的字符串: 我想使用空格作为定界符来分割此字符串-但我不想分割在方括号内出现的空格。因此,从上面的示例中,我想要这个数组: 关于什么正则表达式的任何建议可以结合使用以实现这一目标? 这是另一个例子: 变成 问题答案: 我认为这应该起作用,使用负前瞻 -不匹配在没有括号的情况下关闭括号之前没有的空格: 对于嵌套的括号,您将需

  • 问题内容: 我需要用空格分割我的字符串。为此,我尝试: 但这似乎不起作用。 问题答案: 你所拥有的应该工作。但是,如果提供的空格默认为…其他内容?你可以使用空格正则表达式: 这将导致任意数量的连续空格将你的字符串拆分为标记。 附带说明一下,我不确定“ splited”是不是一个词:)我相信成为split的受害者的状态也是“ split”。这是那些棘手的语法问题之一:-)不要试图变得挑剔,只是想我会

  • 问题内容: 我想像这样分割一个字符串 与。但是当我尝试拆分时,我得到了 我尝试将空字符串拆分后用于检查空字符串,但在android中不起作用。这是我的代码: 我认为有一种方法可以像这样拆分:但无法弄清楚如何。 谢谢您的帮助! 问题答案: 由于to的参数是一个正则表达式,因此您可以查找一个或多个空格()而不是一个空格()。

  • 本文向大家介绍C#按特定字符分割字符串,包括了C#按特定字符分割字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我需要一个类似于的函数,但可能会有多个空格,并且有意义的字符之间的空格数也不相同。像这样: 我可以以某种方式使用正则表达式来捕捉它们之间的空格吗? 问题答案: 如果您不向传递任何参数,它将把空格运行视为单个分隔符: 或者如果你想

  • 我正在尝试从Java文本文件中读取一行。我得到一个异常。 这是文本文件中的行: 我需要用“#”拆分,这部分起作用了。当我试图访问位置1处的元素时,Java抛出异常。我想这是因为名字和姓氏之间有空格,因为当我显示的是“Chiquita”,而不是“Chiquita Sanford”。 当第一个数组索引中有多个单词时,Java对拆分是否有一些限制。

  • 问题内容: 我只想在至少有两个或多个空格的情况下才拆分字符串。 例如 结果: 我希望它看起来像这样: 问题答案:

  • 问题内容: 是否可以每个字符分割一个字符串? 例如,假设我有一个包含以下内容的字符串: 我怎样才能使它看起来像这样: 问题答案: 192 为了完整起见,你可以使用正则表达式执行此操作: 对于字符的奇数,你可以执行以下操作: 你还可以执行以下操作,以简化较长块的正则表达式: re.finditer如果字符串很长,则可以使用它逐块生成。