使用多个单词边界分隔符拆分字符串为单词
我觉得我想做的事情是一个比较常见的任务,但在网上找不到相关的资料。我有一些带标点的文本,我想要一个单词的列表。
"Hey, you - what are you doing here!?"
应该是这样的
['hey', 'you', 'what', 'are', 'you', 'doing', 'here']
但是Python的 str.split()
只接受一个参数,所以我在用空格分割后,得到的单词后面还带着标点。有没有什么好主意?
31 个回答
510
还有一种快速的方法,不用正则表达式,可以先替换字符,像下面这样:
>>> 'a;bcd,ef g'.replace(';',' ').replace(',',' ').split()
['a', 'bcd', 'ef', 'g']
713
re.split(pattern, string[, maxsplit=0])
这个函数的作用是根据你给定的模式(pattern)来分割字符串(string)。如果你在模式里用了括号,那么括号里面的内容也会被一起返回,成为结果列表的一部分。如果你设置了maxsplit参数,并且这个值不为零,那么最多只会进行maxsplit次分割,剩下的部分会作为列表的最后一个元素返回。(需要注意的是:在最初的Python 1.5版本中,maxsplit这个参数是被忽略的,但在后来的版本中这个问题已经修复了。)
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
543
使用正则表达式的一个合理场景:
import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']