Нечувствительность к регистру Java regex не работает

Я пытаюсь удалить некоторые слова в строке с помощью regex, используя следующую программу. Его удаление должным образом, но оно учитывает только чувствительный к регистру. Как сделать его нечувствительным к регистру. Я сохранил (?1) в replaceAll, но это не сработало.

package com.test.java;

public class RemoveWords {

    public static void main(String args[])
    {

        // assign some words to string

        String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";

            System.out.print(sample.replaceAll("( is | the |in | any )(?i)"," "));
    }
}

ВЫВОД:

what Is latest news today  Europe? there thing special or everything common.

Ответ 1

Вам нужно поместить (?i) до часть шаблона, который вы хотите сделать регистрозависимым:

System.out.print(sample.replaceAll("(?i)\\b(?:is|the|in|any)\\b"," "));
                                    ^^^^

Посмотрите

Я заменил пробелы вокруг ключевых слов, которые нужно удалить с помощью границы слова (\\b). Проблема возникает из-за того, что два ключевых слова могут быть разделены одним пробелом.

Если вы хотите удалить ключевые слова только в том случае, если они окружены пробелом, то вы можете использовать позитивный lookahead и lookbehind как:

(?i)(?<= )(is|the|in|any)(?= )

Посмотрите

Ответ 2

Я не думаю, что вы можете указать нечувствительность к регистру с быстрой заменой. Вместо этого попробуйте шаблон. то есть:

package com.test.java;

public class RemoveWords {

public static void main(String args[]) {
  // assaign some words to string
  String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";
  String regex = "( is | the |in | any )"
  System.out.print
  (
    Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(sample).replaceAll("")
  );
 }
}

Ответ 3

измените is на [iI][sS]

sample.replaceAll("( [iI][sS] ...