我从过去的试卷中尝试了一些正则表达式,我正在努力理解如何为它们推导出一个表达式。这些是问题:
Words that contain two or more 3 letter sequence of
consonants separated by vowels (e.g. uncrinkle,
thymopsyche, xlyoglyphy, unwrongfully)
Words that contain 2 or more 2 letter sequences of
vowels (e.g. visionproof, steamier, preequip)
我不确定如何处理它们,我原来的尝试我只是将它们分开,使得模式在一个非常长的正则表达式字符串中匹配,在那里我检查了由元音分割的三个辅音,然后在正则表达式中重复该模式两次,但我不认为这是一个很好的解决方案,使用群组会有更好的解决方案吗? (我不太明白)
答案 0 :(得分:0)
使用:
(?:[a-zA-Z]+)?([^aeiou,.\s]{2,3}[a-zA-Z]+)/g
它会将该单词与2个或更多3个辅音匹配。对于元音,您可以使用:
(?:[a-zA-Z]+)?([aeiou]{2,3}[a-zA-Z]+)/g
工作原理:
(?:[a-zA-Z]+)?
在匹配前选择everthing,如果没有,则忽略。
[^aeiou,.\s]
[aeiou]{2,3}
捕获辅音/元音,第一个正则表达式忽略,
,.
和\s
最后[a-zA-Z]+
选择其余部分。
答案 1 :(得分:0)
(首先,辅音和元音的确切列表取决于您的语言。为了节省空间,我将仅使用bcd ...用于辅音和aei ...用于元音。)
要匹配"包含由元音和#34;分隔的两个或更多3个辅音序列的单词,你需要匹配三个辅音,然后是一个元音(或多个元音;这个句子对我来说似乎不明确),然后是三个辅音。
[bcd...]{3}[aei...][bcd...]{3}
[bcd...]{3}[aei...]+[bcd...]{3}
要匹配包含2个或更多2个元音序列元音和#34;的单词,您需要简单地匹配2个元音,然后是任何内容,然后是2个元音。同样,如果字符串" aeio"应该被接受,因为它有两个元音的两个元音序列(" ae"和#34; io")。解决方案将是以下之一:
[aei...]{2}[aei...bcd...]*[aei...]{2}
[aei...]{2}[bcd...]+[aei...]{2}
如果你应该在较长的文字中检测整个单词,可以在\b\S*
前加上每个正则表达式并附加\S*\b
,其中\b
表示单词分隔符\S*
1}}表示任何非空白字符序列。
群组和反向引用在这里没有帮助,因为没有重复。
"或更多"部分意味着单个匹配就足够了;如果它是"恰好两个",你需要检查是否有更多这样的序列,这会使事情变得复杂。