Java Regex: слово, заканчивающееся на 's', за исключением определенных слов

Я пытаюсь найти регулярное выражение. У меня есть это:

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

Затем я хочу удалить "s" в конце всех слов, кроме "anglais" и "francais".

Я попробовал это, но это не работает, конечно:

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;

2 ответа

Соответствовать любому слову, оканчивающемуся на s но anglais а также francais вы можете использовать

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

Посмотреть демо-версию регулярного выражения

подробности

  • \b - ведущая граница слова
  • (?!(?:anglais|francais)\b) - негативный взгляд, который не соответствует, если есть целое слово anglais или же francais сразу справа от текущего местоположения
  • (\w*) - Группа 1: ноль или более символов слова
  • s - ан s
  • \b - конечная граница слова.

В Java:

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

Ваш комментарий звучит так, как будто вы просто хотите найти слова, заканчивающиеся на 's'. Если это так, вы можете использовать что-то вроде этого:

[\S]+(s\b) ссылка на регулярное выражение

Другие вопросы по тегам