Java 将s识别为元音后的最后一个字符的正则表达式模式
我试图创建一个正则表达式模式,在这里我可以检测字符串是否以“s”结尾。然后我想删除字符串末尾的“s”,但有一个问题 如果且仅当前面的单词部分包含的元音不在“s”之前,并且该单词不包含另一个元音时,我想删除“s” 例如,“sales”一词会变成“sale”,因为在“e”之前有一个元音,在单词末尾的“s”之前 单词“示例”->“示例” 但是“gas”这个词应该保持为gas,因为唯一的元音是紧跟在“s”之前的元音 我提出了以下建议:Java 将s识别为元音后的最后一个字符的正则表达式模式,java,regex,string,Java,Regex,String,我试图创建一个正则表达式模式,在这里我可以检测字符串是否以“s”结尾。然后我想删除字符串末尾的“s”,但有一个问题 如果且仅当前面的单词部分包含的元音不在“s”之前,并且该单词不包含另一个元音时,我想删除“s” 例如,“sales”一词会变成“sale”,因为在“e”之前有一个元音,在单词末尾的“s”之前 单词“示例”->“示例” 但是“gas”这个词应该保持为gas,因为唯一的元音是紧跟在“s”之前的元音 我提出了以下建议: public String removeS(String word)
public String removeS(String word) {
if (word.matches(".*[a|e|i|o|u][.*]s")){
word = word.substring(0, word.length()-1);
}
return word;
}
现在,当我输入“sales”这样的词时,什么都没有发生。它只是保留了“销售”这个词。我假设is与我用来匹配字符串的regex模式有关
我对regex相对来说是新手,但我试图通过这个
“*[a | e | I | o | u][.]s”
得到的是我上面解释的。与字符串匹配,该字符串在字符串末尾的s前面的字符前面有一些元音(a、e、i、o、u)。我在这里忽略了什么吗?现在,我不知道您的用例的详细信息,只知道提供的信息,但这应该有用:
public String removeS(String word) {
if (word.matches(".*[aeiou].+[aeiou]s")){
word = word.substring(0, word.length()-1);
}
return word;
}
这匹配“零个或多个字符”,后跟“一个元音”,后跟“一个或多个字符”,后跟“另一个元音”,后跟“s”
你可以想象这一点
请注意,这要求两个元音之间至少有一个字母。如果您想将
sees
变为see
,请将+
更改为另一个*
,如。我建议您不要尝试此操作,因为您的异常列表将不断增长,不断增长,不断增长,不断增长,不断增长
例如,工作压力
将按照您的规则删除最后一个s
无论如何,这里有一个增强版,它也保持了double-s
的完整性:
str.replaceAll("(?i)([aeiou][a-z]*[a-rt-z])s\\b", "$1")
。请注意,应力
和has
是如何单独存在的
还要注意愿望如何变成愿望,这是错误的。对于像这样简单的规则来说,英语拼写太复杂了
哦,我喜欢安迪·特纳给我的铁路图 *[aeiou].*s
可能更好;但是我仍然不理解这个条件我想删除's'当且仅当前面的单词部分包含一个元音而不是紧接着's'
类似于[^aeiou]。+[aeiou]s
?首先,你的语法是完全无效的。到目前为止,编写您构建的正则表达式的正确方法是“*[aeiou].*s”
,但是这与您想要的方法不匹配。@很抱歉,这有点混乱。要删除s,单词中必须有一个不是倒数第二个字符的元音。所以“gas”这个词不会删除s,因为唯一的元音就在s之前。在Otter中的单词中需要有另一个元音才能删除s。与“sales”一词一样,有一个元音“a”不在倒数第二个位置,但肯定会。它们将被*
/+
吃掉。这非常有效。我用它作为另一种方法的一部分,我检查了SS案例,但效果更好。您能解释一下您使用的正则表达式吗?然后单击指向正则表达式101的链接。右上角有解释。这够好吗?