使用正则表达式,如果它是元音,如何提取除最后一个字符之外的整个单词?
输入:
ansia
bello
ansid
每个的预期输出:
ansi
bell
ansid
这就是我尝试过的,但它只有在我最后有一个元音时才有效:
^(.*[^aeiou])
答案 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)