首页 > 解决方案 > 如何使用正则表达式确定单词中的音节

问题描述

鉴于我有一个故事。故事由文字组成。我需要构造一个正则表达式来计算故事中每个单词的音节数。

我尝试构造一个满足以下条件的正则表达式:

IF word ends with character 'e'
AND word also contains at least one of the vowel characters 'a'|'e'|'i'|'o'|'u'|'y'
THEN do not match 'e' at the end of word
BUT match all the other vowels in word
IF word contains only a lone 'e' at the end of a word
AND word does not contain other vowel characters
THEN match the lone 'e'

预期输出:

计算为每个单词找到的匹配项应导致:

航空航天3音节_ _

1 个音节代表

一共4个音节。

我能够构建(?(?=([a-zA-Z]+e))(?=([aeiouy]))),但如果可能的话,需要你的帮助才能在一个表达式中完成它。

标签: javaregex

解决方案


在阅读了很多关于 Regex 和 Regex 条件的使用之后。Java Regex 包默认不支持条件。(在这里找到答案:Java 中的条件正则表达式?

因此,最终构造了一个没有 if-else-then 条件的 Regex。

([aeiouyAEIOUY]+[^e.\s])|([aiouyAEIOUY]+\b)|(\b[^aeiouy0-9.']+e\b)

https://regex101.com/r/gPO6mP/17

欢迎改进。

谢谢。


推荐阅读