在Python中的空白上拆分字符串

sia*_*mii 416 python regex string whitespace split

我正在寻找Python的等价物

String str = "many   fancy word \nhello    \thi";
String whiteSpaceRegex = "\\s";
String[] words = str.split(whiteSpaceRegex);

["many", "fancy", "word", "hello", "hi"]
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 771

str.split()没有参数的方法在空格上拆分:

>>> "many   fancy word \nhello    \thi".split()
['many', 'fancy', 'word', 'hello', 'hi']
Run Code Online (Sandbox Code Playgroud)

  • 另外要知道的是,如果你只想要第一个单词(这意味着将`1`作为第二个参数传递),你可以使用`None`作为第一个参数:`s.split(None,1)` (67认同)
  • @yak:你能否编辑你的评论.它现在听起来的方式是s.split(None,1)只返回第一个单词.它给出了一个大小为2的列表.第一个项是第一个单词,第二个是字符串的其余部分.`s.split(None,1)[0]`只会返回第一个单词 (20认同)
  • 如果您只想要第一个单词,请使用*str.partition*. (8认同)
  • @galois不,它使用自定义实现(速度更快)。另请注意,它以不同的方式处理前导和尾随空格。 (2认同)
  • @KishorPawar对我来说,你目前正在努力实现的目标还不是很清楚。是否要在空格上拆分,而忽略单引号子字符串中的空格?如果是这样,您可以查看[`shlex.split()`](https://docs.python.org/3/library/shlex.html#shlex.split)。否则,我建议您提出一个新问题–您将获得更快,更详细的答案。 (2认同)

Ósc*_*pez 64

import re
s = "many   fancy word \nhello    \thi"
re.split('\s+', s)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果性能有问题,这通常比str.split慢. (4认同)
  • 这在行尾给了我一个空白标记。不知道为什么,原来的线路甚至没有这个。也许这会忽略换行符? (2认同)
  • @Gulzar最后做了一个`strip()` (2认同)

Avi*_*Raj 15

通过re模块的另一种方法 它执行匹配所有单词的反向操作,而不是按空格吐出整个句子.

>>> import re
>>> s = "many   fancy word \nhello    \thi"
>>> re.findall(r'\S+', s)
['many', 'fancy', 'word', 'hello', 'hi']
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式将匹配一个或多个非空格字符.


Rob*_*man 13

使用split()将是分裂字符串的最Pythonic方式.

记住,如果你split()在一个没有空格的字符串上使用,那么该字符串将在列表中返回给你.

例:

>>> "ark".split()
['ark']
Run Code Online (Sandbox Code Playgroud)