【问题标题】:Java Regex: word ending in 's' except specific wordsJava Regex:以's'结尾的单词,特定单词除外
【发布时间】:2023-11-14 07:21:02
【问题描述】:

我正在尝试查找正则表达式。 我有这个:

String regex_words_ended_s_in_singular_form = "\\b(anglais|francais)\\b";

然后,我想删除除“anglais”和“francais”之外的所有单词末尾的“s”。

我试过这个,但它当然不起作用:

String temp = tweet.replaceAll( "(?!" + regex_words_ended_s_in_singular_form + ")" + "s\\b","");

while (!temp.equals(tweet)) {
    tweet = temp;
    temp = tweet.replaceAll( "(?!" + regex_words_ended_s_in_singular_form + ")" + "s\\b","");
}
tweet = temp;

【问题讨论】:

  • 所以您只需要一个正则表达式,它可以找到任何以s 结尾的单词?
  • 能否提供输入输出示例?

标签: java regex replaceall


【解决方案1】:

要匹配以s 结尾的任何单词,但可以使用anglaisfrancais

\b(?!(?:anglais|francais)\b)(\w*)s\b

regex demo

详情

  • \b - 前导词边界
  • (?!(?:anglais|francais)\b) - 如果在当前位置的右侧有一个完整的单词 anglaisfrancais,则匹配失败
  • (\w*) - 第 1 组:零个或多个字字符
  • s - 一个s
  • \b - 词尾边界。

在 Java 中:

String res = s.replaceAll("\\b(?!(?:anglais|francais)\\b)(\\w*)s\\b", "$1");

【讨论】:

  • 我只想删除文本每个单词末尾的“s”,但不适合英语和法语。有了你的解决方案,我只删除单词而不仅仅是's':/
  • @GeoffreyGuettier 已修复。
  • 非常感谢它有效!我只有最后一个问题,我是否需要一个循环,因为“|” ? “?:”是什么意思?
  • 对不起,它不起作用,它删除了所有单词而不是 's' :( 也许用这个: String res = s.replaceAll("\\b(?!(?:anglais|francais )\\b)(\\w*)s\\b", "$1$2"); 让我试试……
【解决方案2】:

您的评论听起来像是您只想找到以“s”结尾的单词。如果是这样,你可以使用这样的东西:

[\S]+(s\b) regexr link

【讨论】:

  • 不,我不想要这个。我想删除除“anglais”和“francais”之外的单词末尾的“s”。