Python正则表达式在多个空格上分裂

时间:2014-04-29 10:20:43

标签: python regex string

我期待一个用户输入字符串,我需要将其拆分为单独的单词。 用户可以输入用逗号或空格分隔的文本。

例如,文字可能是:

hello world this is John。 或

hello world this is John甚至

hello world, this, is John

如何有效地将该文本解析为以下列表?

['hello', 'world', 'this', 'is', 'John']

提前致谢。

3 个答案:

答案 0 :(得分:2)

使用正则表达式:r'[\s,]+'分割 1个或多个 空白字符(\s)或逗号({{1} }})。

,
  

import re s = 'hello world, this, is John' print re.split(r'[\s,]+', s)

答案 1 :(得分:2)

由于您需要根据空格和其他特殊字符进行拆分,因此最佳RegEx将为\W+。引自Python re documentation

  

\ W

     

如果未指定LOCALEUNICODE标志,则匹配任何非字母数字字符;这相当于集合[^a-zA-Z0-9_]。对于LOCALE,它将匹配不在集合[0-9_]中的任何字符,并且不会定义为当前语言环境的字母数字。如果设置了UNICODE,这将匹配除[0-9_]以外的任何内容以及Unicode字符属性数据库中归类为非字母数字的字符。

例如,

data = "hello world,    this, is       John"
import re
print re.split("\W+", data)
# ['hello', 'world', 'this', 'is', 'John']

或者,如果您有必须分割字符串的特殊字符列表,则可以执行

print re.split("[\s,]+", data)

此分裂基于任何空白字符(\s)和逗号(,)。

答案 2 :(得分:1)

>>> s = "hello      world this     is            John"
>>> s.split()
['hello', 'world', 'this', 'is', 'John']
>>> s = "hello world, this, is John"
>>> s.split()
['hello', 'world,', 'this,', 'is', 'John']

第一个是通过split而没有参数正确解析的;)

然后你可以:

>>> s = "hello world, this, is John"
>>> def notcoma(ss) :
...     if ss[-1] == ',' :
...             return ss[:-1]
...     else :
...             return ss
... 
>>> map(notcoma, s.split())
['hello', 'world', 'this', 'is', 'John']