如果是元音,则提取不带最后一个字符的字符串

时间:2014-06-18 19:40:52

标签: java regex

使用正则表达式,如果它是元音,如何提取除最后一个字符之外的整个单词?

输入:

ansia
bello
ansid

每个的预期输出:

ansi
bell
ansid

这就是我尝试过的,但它只有在我最后有一个元音时才有效:

^(.*[^aeiou])

3 个答案:

答案 0 :(得分:1)

类似于@Sotirios Delimanolis在他的评论中所写,但使用单词边界,如果你在一行中有多个单词,它将起作用。

\b(\w+?)[aeiou]?\b

这可以通过以下方式工作:

1)\b匹配单词的开头。这适用于行上的第一个单词或前面带有非单词字符的单词(单词字符是任何字母数字字符)。

2)(\w+?)匹配并捕获您关心的单词部分。

2a)\w匹配任何单词字符。

2b)+使\w匹配一次或多次

2c)?使+匹配尽可能少的字符。这很重要,因为如果单词末尾有一个元音,我们不想在捕获组中匹配它,而是让(3)处理它。

3)[aeiou]?匹配,但如果存在元音字符则不捕获元音字符

3a)[aeiou]匹配元音

3b)?使[aeiou]匹配为零或一次

4)\b匹配单词的结尾。这适用于行尾或单词后跟非单词字符的单词。

你说你正在使用的工具使用Java正则表达式实现,ansid对我的正则表达式不起作用。我用纯Java测试了它,它似乎对我有用:

Pattern pattern = Pattern.compile("\\b(\\w+?)[aeiou]?\\b");
Matcher matcher = pattern.matcher("ansia ansid cake cat dog");
while (matcher.find()) {
  System.out.println(matcher.group(1));
}

打印

ansi
ansid
cak
cat
dog

答案 1 :(得分:1)

试用正则表达式(\b[a-zA-Z]+?(?=[aeiou]\b))|(\b[a-zA-Z]+?[^aeiou]\b)。它捕获以辅音结尾的单词或以元音结尾的单词,并在末尾省略元音。

答案 2 :(得分:1)

这种模式对我有用 ^(.*?)(?=[aeiou]$|$)
Demo

如果输入是可以在下面指出的一行中的单词
使用这种模式
\b([a-z]+?)(?=[aeiou]\b|\b)
Demo

相关问题