我试图匹配一个包含2个元音的单词(不必连续),但是我的正则表达式要么不匹配,要么不够。这是最后一次迭代(飞镖)。
final vowelRegex = new RegExp(r'[aeiouy]{2}');
这里是一个被解析的例子,它应该匹配,一个,肩膀,它们和之后。它只是匹配肩膀和他们的。我理解为什么,因为那是我定义的表达。如何定义表达式以匹配2个元音,无论单词中的位置如何?
one shoulder their the which over
表达式只需要一次测试一个单词,所以希望这样可以简化事情。
答案 0 :(得分:3)
您可以使用:
new RegExp(r'(\w*[aeiouy]\w*){2}');
答案 1 :(得分:2)
你可以试试这个:
\S*[aeiouy]\S*[aeiouy]\S*
\S*
匹配任何非空格字符(等于[^\r\n\t\f ]
)*
量词 - 零和无限次之间的匹配[aeiou]
匹配[aeiou]
输入字符串:one shoulder their the which over
它将匹配四个字:one shoulder their over
答案 2 :(得分:2)
前两个答案都不正确。
(\S*[aeiouy]\S*){2}
可以匹配非空白字符的子字符串,即使它们包含非字字符(proof)。
\S*[aeiouy]\S*[aeiouy]\S*
有同样的问题(proof)。
正确的解决方案:
\b([^\Waeiou]*[aeiou]){2}\w*\b
如果您只想将空格作为单词边界(而不是任何非单词字符),则使用以下正则表达式,其中目标单词位于捕获组\2
中。
(\s|^)(([^\Waeiou]*[aeiou]){2}\w*)(\s|$)
答案 3 :(得分:2)
我做:
\b(?:\w*[aeiouy]+\w*){2,}\b
<强>解释强>
\b : word boundary
(?: : start non-capture group
\w* : 0 or more word characters
[aeiouy]+ : 1 or more vowels
\w* : 0 or more word characters
){2,} : end group repeated at least twice
\b : word boundary