Нечувствительность к регистру 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] ...