java - 如何使用正则表达式确定单词中的音节
问题描述
鉴于我有一个故事。故事由文字组成。我需要构造一个正则表达式来计算故事中每个单词的音节数。
我尝试构造一个满足以下条件的正则表达式:
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])))
,但如果可能的话,需要你的帮助才能在一个表达式中完成它。
解决方案
在阅读了很多关于 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)
欢迎改进。
谢谢。
推荐阅读
- node.js - 数据存储模拟器创建空 index.yaml - 远程 Firebase 会引发错误,而本地不会
- node.js - 使用 mosca MQTT 的请求响应模式
- algorithm - 从 PEG 语法生成正确的短语
- javascript - 如何使撤消和重做与我的文本同步解决方案一起使用?
- bash - 如何使用嵌套的 AWS CLI 命令语法?
- excel - 如何根据 2 个值总结分数?
- java - 无法从 docker 容器运行我的 Java 8 应用程序
- sql - 修改报告以使用财政年度和季度
- javascript - React如何在ListItem之间切换时每次调用componentDidMount
- regex - 正则表达式仅匹配方括号内的逗号