Regex 这种情况下的正则表达式

Regex 这种情况下的正则表达式,regex,Regex,我正在寻找一个正则表达式,在这里我计算单词的音节。可以算作音节的是任何有aeiou的单词,但以e结尾的单词不是音节。一个音节中的任何连续元音 e、 g 这就是我目前在java [AEIOYUaeioyu]+ 这是音节,但不考虑用“ E < /代码>结束的单词的音节。任何人对此有何想法 [AEIOYUaeioyu]+(?=\w)这将检查元音后面是否有任何字符假设像aaii这样的大小写:-aa和ii被视为两个不同的音节,这似乎有效 (?=([AIOUYaiouy]))(\\1+)|([Ee]+)(

我正在寻找一个正则表达式,在这里我计算单词的音节。可以算作音节的是任何有aeiou的单词,但以e结尾的单词不是音节。一个音节中的任何连续元音

e、 g

这就是我目前在
java

[AEIOYUaeioyu]+

这是音节,但不考虑用“<代码> E < /代码>结束的单词的音节。任何人对此有何想法

[AEIOYUaeioyu]+(?=\w)这将检查元音后面是否有任何字符

假设像
aaii
这样的大小写:-
aa
ii
被视为两个不同的音节,这似乎有效

(?=([AIOUYaiouy]))(\\1+)|([Ee]+)(?<![Ee]$)
(?=([AIOUYaiouy]))(\\1+)([Ee]+)(?

Java代码


String pattern=“(?=([AIOUYaiouy]))(\\1+)|([Ee]+)(?根据您对音节的定义,我认为它与正则表达式的关系不大,但更多的是关于如何使用正则表达式来获得结果

例如,只需删除结尾
e
,并附加一个伪辅音,即可通过简单拆分得到结果:

(此代码假定所有小写,从而简化了大小写)

以上代码给出

this 1
where 1
seeeetennnces 3
why 1

(尽管我想知道你对音节的定义是否正确)

我的想法是,要想找到一个一刀切的正则表达式来检测英语单词中的音节是非常困难的。原因是英语语法非常不规则,我希望有很多边缘格。你能再详细说明一下吗?你能告诉我
aaii
中的音节数吗?是
aa
I吗我
被视为不同的?vitae中有多少个音节?
rapee
?“滑雪”有两个音节“滑雪”"有两个syllables@Bohemian根据
OP的
规则,它应该是
1
一个音节中的任何连续元音
@rock321987是正确的。任何连续音节都被称为一个音节。这不是音节的真正定义,而是帮助我们写作的给定定义regex@Praveen如果你需要任何解释,我觉得自由提问,别忘了接受……:@rock321987我当然会的。让我回家实施,确认这项工作,然后继续接受它。正如你所说的,这是为了帮助理解正则表达式。这不是音节的正确定义,而是一部他们“愚蠢”的小说我也不喜欢替换最后一个e,因为我会在其他地方使用它,关键是要写一个正则表达式来满足这种情况
String pattern = "(?=([AIOUYaiouy]))(\\1+)|([Ee]+)(?<![Ee]$)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
int cnt = 0;

while (m.find()) {
   cnt++;
}

System.out.println(cnt);
import java.text.*;
import java.util.regex.*;
import java.util.*;

public class Foo {
    public static void main(String[] args) {
        syllables("this");
        syllables("where");
        syllables("seeeetennnces");
        syllables("why");
    }

    public static int syllables(String s) {
        int i = s.replaceAll("e$", "").replaceAll("$","x").split("[aeiouy]+").length - 1;
        System.out.println(s + " " + i);
        return i;
    }
}
this 1
where 1
seeeetennnces 3
why 1