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

3
我希望能够接收用户输入的字符串,然后将其拆分为单独的单词。用户可以使用逗号或空格来分隔文本。
例如,文本可能是:
"hello world this is John" 或者 "hello world this is John" 甚至是 "hello world, this, is John"
如何高效地将这些文本解析成以下列表?
['hello', 'world', 'this', 'is', 'John']
提前感谢您的帮助。

尝试过使用 r'/\s+/g' 吗? - Mr. Polywhirl
可能是 在 Python 中按空格拆分字符串 的重复问题。 - Robin
问题是我不知道用户会使用逗号还是空格。因此,我需要一个解决方案来涵盖所有情况。 - stratis
我的错,没看到逗号。标题有点误导人。你看过 re.split 吗?你当前的尝试在哪里失败了? - Robin
3个回答

4
使用正则表达式:r'[\s,]+',以一个或多个空格字符(\s)或逗号(,)进行分割。
import re

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

['你好', '世界', '这', '是', '约翰']


3

由于需要根据空格和其他特殊字符进行拆分,最好的正则表达式是\W+。引用自Python re文档

\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) 和逗号 (,) 进行分割。


谢谢。干净而有效的解决方案。然而只有print re.split("[\s,]+", data)起作用。也许是因为我在Windows下的原因。 - stratis
是的。\W+ 方法对我返回了一个空列表。然而 re.split 方法运行得非常完美。 - stratis
@Konos5 我在发布之前确实进行了测试。因此,如果您能够提供一些示例数据帮助我重现问题,那就太好了 :) - thefourtheye

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']

他必须根据特殊字符进行分割。 - thefourtheye

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接