协慌网

登录 贡献 社区

将字符串拆分为具有多个单词边界定界符的单词

我认为我想做的是一项相当普通的任务,但是我在网络上找不到任何参考。我的文字带有标点符号,我想要一个单词列表。

"Hey, you - what are you doing here!?"

应该

['hey', 'you', 'what', 'are', 'you', 'doing', 'here']

但是 Python 的str.split()仅适用于一个参数,因此在用空格分割后,所有单词都带有标点符号。有任何想法吗?

答案

re.split()

re.split(pattern,string [,maxsplit = 0])

通过模式的出现来分割字符串。如果在模式中使用捕获括号,则模式中所有组的文本也将作为结果列表的一部分返回。如果 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.']

正则表达式合理的情况:

import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

另一种无需使用正则表达式的快速方法是先替换字符,如下所示:

>>> 'a;bcd,ef g'.replace(';',' ').replace(',',' ').split()
['a', 'bcd', 'ef', 'g']