我正在寻找一个正则表达式,我按字数计算音节。什么算作音节是任何一个词,但是一个词在e中结尾,不是一个音节。任何一个音节中的连续元音。
e.g。
this (1 syllable)
Where (1 syllable)
why (1 syllable)
seeeenteences (3 syllable)
whyyyye (1 syllable)
这是我目前在java
[AEIOYUaeioyu]+
这说明了音节但不考虑排除以e
结尾的单词的音节。任何人对此的任何想法。
答案 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)
答案 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
(虽然我想知道你的音节定义是否正确)