【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我认为我想做的是一项相当普通的任务,但是我在网络上找不到任何参考。 我的文字带有标点符号,我想要一个单词列表。
"Hey, you - what are you doing here!?"
应该
['hey', 'you', 'what', 'are', 'you', 'doing', 'here']
但是Python的str.split()
仅适用于一个参数,因此在用空格分割后,所有单词都带有标点符号。 有任何想法吗?
#1楼
我正在重新熟悉Python,并需要同样的东西。 findall解决方案可能更好,但是我想到了:
tokens = [x.strip() for x in data.split(',')]
#2楼
正则表达式合理的情况:
import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']
#3楼
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.']
#4楼
尝试这个:
import re
phrase = "Hey, you - what are you doing here!?"
matches = re.findall('\w+', phrase)
print matches
这将打印['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']
#5楼
实现此目的的另一种方法是使用自然语言工具包( nltk )。
import nltk
data= "Hey, you - what are you doing here!?"
word_tokens = nltk.tokenize.regexp_tokenize(data, r'\w+')
print word_tokens
打印: ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']
这种方法的最大缺点是您需要安装nltk软件包 。
好处是,一旦获得令牌,您就可以使用其余的nltk软件包做很多有趣的事情 。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3151495