如何在Python中查找语料库中aeiouy按指定顺序出现的单词
按顺序匹配aeiouy字母的单词实现方案
你只需要修改正则表达式的匹配规则即可,不需要额外写复杂的判断逻辑。
原来的正则r'[aeiouy]'仅能匹配包含任意一个目标字母的单词,我们可以用.*通配符实现按顺序匹配的需求:
import nltk import re english = nltk.corpus.words.words() # 匹配aeiouy按顺序出现的所有单词 words = [w for w in english if re.search(r'a.*e.*i.*o.*u.*y', w, re.IGNORECASE)]
规则说明
- 正则中的
.*代表匹配任意数量的任意字符,可兼容两个目标元音之间插入其他字母的场景,刚好匹配facetiously这类符合要求的单词 - 添加
re.IGNORECASE参数是为了兼容语料库中首字母大写的单词,无需区分大小写匹配;如果仅需要匹配全小写单词,去掉该参数即可
可选严格匹配规则
如果你要求aeiouy按顺序各出现一次,且相邻元音之间不会出现更靠后的目标元音(比如a和e之间不能出现i/o/u/y),可以使用更严格的正则:
words = [w for w in english if re.search(r'[^a]*a[^e]*e[^i]*i[^o]*o[^u]*u[^y]*y', w, re.IGNORECASE)]
内容的提问来源于stack exchange,提问作者Eddie14
相关产品推荐
相关产品推荐

