【问题标题】:Python regular expressions - find 3 letter words containing only vowelsPython 正则表达式 - 查找仅包含元音的 3 个字母单词
【发布时间】:2015-05-25 00:40:51
【问题描述】:

作为一些学校作业的一部分,我们设定的一项任务是使用 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']

【问题讨论】:

    标签: python regex nltk


    【解决方案1】:

    re.search() 如果输入的 part 匹配(在您的情况下,如果单词包含 至少一个 元音)则返回 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)]
    

    【讨论】:

    • 另外,要使其成为 3 个字母,您需要在组后添加 {3} 而不是 +
    • @pinkboi:对;他说他已经解决了这个问题,但是在正则表达式本身中处理它是一个更好的主意。谢谢!
    • 我用 [w for w in words if re.search('^[aeiou]+$', w) and len(w) == 3],没有意识到你可以包括正则表达式中的长度。现在已将我的代码更改为 [w for w in words if re.search('^[aeiou]{3}$', w)],谢谢。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2016-12-07
      • 2020-09-16
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多