此正则表达式中必须纠正什么才能从印尼语句子中提取发音?

问题描述 投票:1回答:1

英文单词ability的发音为4个音节:a,bi,li,ty

印尼语中单词kekuatan的发音为4个音节:ke,ku,a,tan

这是规则:

enter image description here

这是印度尼西亚的例句

Saya akan menyambutnya di kampung. Kita saling menyayangi untuk minum air teh. menganggap menggertak minggu mencinta

我已经写了这样的正则表达式https://regex101.com/r/At64WO/3

[^aeiou]*[aeiou]+(?:[^aeiou]*$|[^aeiou](?=[^aeiou]))?

和结果

Sa | ya | a | kan | men | yam | but | nya | di | kam | pun | g。 Ki | ta | sa | lin | g men | ya | yan | gi | un | tuk mi | num | 空气 | || men | gan | ggap | men | gger | tak | min | ggu >> | men | cin | ta >>

我希望结果变成(加粗标记)

Sa | ya | a | kan | me | nyam

| but | nya | di | kam | pung。>> | Ki | ta | sa | ling | me | nya | ya | ngi | un | tuk mi | num | a | ir | h。 | me | ngang |差距| meng | ger | tak | ming | gu | men | cin | ta>

如果尚未从问题中理解,请发表评论

在英语中,单词capability的发音为4个音节:a,bi,li,ty在印度尼西亚语中对kekuatan单词的发音为4个音节:ke,ku,a,tan这是规则:...] >

您想将单词分成音节,而音节以辅音序列开始,然后以元音结束。

字形:a[iu]|oi|[aeiou]辅音模式:kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz]

音节的正则表达式为(?:${consonant})*(?:${vowel})+(?:(?:${consonant})*(?=[^a-zA-Z]|$)|(?>${consonant})(?=(?:${consonant})))?但是

JS正则表达式不支持原子组(请参见(?>${consonant}))。因此,您需要使用带有捕获组并在其后进行反向引用的正向超前来模拟它((?=(${consonant}))\1)。

这是JS演示:

const text = 'Saya akan menyambutnya di kampung. Kita saling menyayangi untuk minum air teh. menganggap menggertak minggu mencinta';
const consonant = 'kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz]';
const vowel = 'a[iu]|oi|[aeiou]';
console.log(`(?:${consonant})*(?:${vowel})+(?:(?:${consonant})*(?=[^a-zA-Z]|$)|(?=(${consonant}))\\1(?=(?:${consonant})))?`);
const regex = new RegExp(`(?:${consonant})*(?:${vowel})+(?:(?:${consonant})*(?=[^a-zA-Z]|$)|(?=(${consonant}))\\1(?=(?:${consonant})))?`, 'gi');
console.log(text.match(regex));

正则表达式为

/(?:kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz])*(?:a[iu]|oi|[aeiou])+(?:(?:kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz])*(?=[^a-zA-Z]|$)|(?=(kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz]))\1(?=(?:kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz])))?/gi

请参见regex demo

javascript regex regex-lookarounds regex-group regex-negation
1个回答
0
投票

您想将单词分成音节,而音节以辅音序列开始,然后以元音结束。

字形:a[iu]|oi|[aeiou]辅音模式:kh|n[yg]|sy|[bcdfghjklmnpqrstvwxyz]

音节的正则表达式为(?:${consonant})*(?:${vowel})+(?:(?:${consonant})*(?=[^a-zA-Z]|$)|(?>${consonant})(?=(?:${consonant})))?但是

© www.soinside.com 2019 - 2024. All rights reserved.