Как экранировать слова в которых есть дефис java
Сейчас пытаюсь экранировать так, но остается "-то"
String result2 = result1.replaceAll("\\кто-то"," ");
Если экранировать так,то остается "то"
String result2 = result1.replaceAll("\\-|\\кто-то"," ");
Так экранировать так не вариант, потому что удаляются частицы "то" из других слов
String result2 = result1.replaceAll("\\-|\\кто-то|\\то"," ");
Требуется удалить(заменить на пробел) слова "кто-то", "кто-либо" и тому подобные из имеющейся строки.
Ответы (1 шт):
Автор решения: Wiktor Stribiżew
→ Ссылка
Вы можете использовать
(?U)\bкто-(?:то|либо)\b
См. пример работы регулярного выражения.
Подробности
(?U)- для старых версий Java этот флаг необходим, чтобы граница слова\bправильно работала с Юникодом\b- граница словакто-- подстрокакто-(?:то|либо)- либото, либолибо\b- граница слова
См. пример кода на Java:
String text = "Требуется заменить на пробел слова \"кто-то\", \"кто-либо\" и тому подобные из имеющейся строки.";
System.out.println(text.replaceAll("(?U)\\bкто-(?:то|либо)\\b", " "));
// => Требуется заменить на пробел слова " ", " " и тому подобные из имеющейся строки.
Можно далее расширить шаблон до, например,
(?Ui)\b(?:кто|как\p{L}*)-(?:то|либо|нибудь)\b
См. пример работы этого регулярного выражения. Тут \p{L}* находит 0 и более любых букв, а (?i) обеспечивает регистронезависимый поиск.