Python正则表达式 - 找到仅包含元音的3个字母单词

时间:2015-03-21 18:17:21

标签: python regex nltk

作为一些学校工作的一部分,我们设定的任务是使用Python中的正则表达式搜索nltk单词语料库并查找仅包含元音的所有3个字母单词。 3个字母的部分很简单,但我找不到只包含元音的单词有困难。我尝试了几种不同的方法但没有成功,我将在下面发布。如果有人能够指出我正确的方向,那就是我做错了。那就太好了。

 import nltk
 words = nltk.corpus.words.words('en')

 threeLetterConsonants = [w for w in words if re.search('[aeiou]', w)] 
 threeLetterConsonants[:10]

返回

['a', 'aa', 'aal', 'aalii', 'aam', 'Aani', 'aardvark', 'aardwolf', 'Aaron', 'Aaronic']

我也尝试过:

 threeLetterConsonants = [w for w in words if re.search('[^bcdfghjklmnpqrstvwxyz]', w)]
 threeLetterConsonants[:10]

返回

 ['A', 'a', 'aa', 'aal', 'aalii', 'aam', 'Aani', 'aardvark', 'aardwolf', 'Aaron']

2 个答案:

答案 0 :(得分:4)

如果输入的部分匹配,则

re.search()返回true(在您的情况下,如果单词包含至少一个元音)。如果您希望整个输入字符串匹配,则需要使用anchors

threeLetterVowels = [w for w in words if re.search('^[aeiou]+$', w)]

根据@pinkboi的建议,你可以使用"三字母限制"进入正则表达式:

threeLetterVowels = [w for w in words if re.search('^[aeiou]{3}$', w)]

答案 1 :(得分:0)

跟着另一个答案;如果你需要将答案限制为只有三个字母,那么在你的正则表达式中你有^ [aeiou] {3} $将它限制为3(并且只有3个)字母。