我试图创建一个正则表达式模式,我可以检测字符串是否以'结尾。我想删除' s'从字符串的末尾开始,但是有一个问题......
我想删除''如果且仅当前面的单词部分包含一个元素之前并不立即,并且该单词不包含另一个元音。
例如,“销售”这个词就是'将成为' sale'因为在' e之前有一个元音。在“'之前”在这个词的最后。
单词'示例' - > '例如'
但是“气体”这个词是什么?应该保持气体,因为唯一的元音是紧接在“#”之前的元音。
我想出了以下内容:
public String removeS(String word) {
if (word.matches(".*[a|e|i|o|u][.*]s")){
word = word.substring(0, word.length()-1);
}
return word;
}
现在,当我输入像" sales"这样的词时,没有任何反应。它仍然是"销售"。我假设这与我用来匹配字符串的正则表达式模式有关。
我对正则表达式相对较新,但我试图用".*[a|e|i|o|u][.*]s"
得到的就是我上面解释的内容。匹配一个字符串,该字符串在字符串末尾的s之前的字符之前具有一些元音(a,e,i,o,u)。我在这里可以忽略一些东西吗?
答案 0 :(得分:4)
我建议你不要尝试这样做,因为你的例外列表会增长,增长,增长,增长,增长,增长......
例如,根据您的规则,工作stress
会删除最后一个s
。
无论如何,这是一个增强版本,也保持双重s
完整:
str.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1")
See regex101 for result。请注意stress
和has
是如何保持不变的。
另请注意wishes
成为wishe
的方式,这是错误的。对于像这样的简单规则,英语拼写太复杂了。
答案 1 :(得分:1)