我期待一个用户输入字符串,我需要将其拆分为单独的单词。 用户可以输入用逗号或空格分隔的文本。
例如,文字可能是:
hello world this is John
。
或
hello world this is John
甚至
hello world, this, is John
如何有效地将该文本解析为以下列表?
['hello', 'world', 'this', 'is', 'John']
提前致谢。
答案 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
如果未指定
LOCALE
和UNICODE
标志,则匹配任何非字母数字字符;这相当于集合[^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']