首页 > 【正则】找到一段英文文章中所有包含且仅包含3个元音的单词

【正则】找到一段英文文章中所有包含且仅包含3个元音的单词

刚接触正则表达式,遇到个难题————“找到一段英文文章中所有包含且仅包含3个元音的单词”,求助该怎么编写正确的正则表达式?
下面是我自己写的规则

\b\w*[aeiou]\w*[aeiou]\w*[aeiou]\w*\b

问题是会匹配到3个以上元音的单词。
还请大神能给予解答。多谢!


/\b[bcdfghjklmnpqrstvwxyz]*[aeiou][bcdfghjklmnpqrstvwxyz]*[aeiou][bcdfghjklmnpqrstvwxyz]*[aeiou][bcdfghjklmnpqrstvwxyz]*\b/gi

/\b(?=[a-z]{3,}\b)[^aeiou]*[aeiou][^aeiou]*[aeiou][^aeiou]*[aeiou][^aeiou]*?\b/gi

另外,希望提问时给出样例文本,方便回答者测试


如果不限定在一个表达式中完成,可以先匹配单词,再过滤出含 3 个元音的,用 Python 实现为:

import re

text = "Regular expressions use the backslash character ('\') to indicate special forms or to allow special characters to be used without invoking their special meaning. "

ws = re.findall(r'\w+', text)

xs = filter(lambda w: len(re.findall(r'[aeiou]', w)) == 3, ws)

print xs
# output: ['Regular', 'character', 'special', 'special', 'characters', 'without', 'invoking', 'special', 'meaning']

一次性解决不了。。我想了另一个途径,可以先用你之前的方法把包含三个及三个以上的单词匹配出来:

.match(/\b\w*[aeiou]\w*[aeiou]\w*[aeiou][\w]*\b/g)

转化成字符串,后去掉 “,”

.toString().replace(/,/g," ")

最后在结合我写的:

.match(/\b[^aeiou\s]*[aeiou][^aeiou\s]*[aeiou][^aeiou\s]*[aeiou][^aeiou\s]*\b/g)

\b[aeiou]{3}\b
没有区分大小写的。
之前写错了,应该是用\b来做界定符的

【热门文章】
【热门文章】