这个条件的正则表达式

时间:2016-04-08 05:04:29

标签: regex

我正在寻找一个正则表达式,我按字数计算音节。什么算作音节是任何一个词,但是一个词在e中结尾,不是一个音节。任何一个音节中的连续元音。

e.g。

this (1 syllable)
Where (1 syllable) 
why (1 syllable)
seeeenteences (3 syllable)
whyyyye (1 syllable)

这是我目前在java

中所拥有的
[AEIOYUaeioyu]+

这说明了音节但不考虑排除以e结尾的单词的音节。任何人对此的任何想法。

3 个答案:

答案 0 :(得分:1)

假设像aa这样的情况: - ii(?=([AIOUYaiouy]))(\\1+)|([Ee]+)(?<![Ee]$) 被视为两个不同的音节,这似乎有效

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);

<强> Regex Demo

Java代码

OP

<强> Ideone Demo

要计算音节,您可以使用 source

注意

编写此代码只是为了满足相关提及的fscanf(inf, "%lf", &a[i][j], sizeof(a[i][j])); 的要求。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据您对音节的定义,我认为它与正则表达式的关系不太相关,而是更多关于如何使用正则表达式来获得结果。

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

(此代码通过假设全小写来简化案例)

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

(虽然我想知道你的音节定义是否正确)