Это не домашнее задание. Я просто пытаюсь учиться/улучшать регулярные выражения.Используйте регулярные выражения, чтобы найти любое число или повторяющиеся слова, используя java
Я пытаюсь найти 1 или более повторяющихся слов в строке. На самом деле, я пытаюсь найти 1 или более повторяющихся слов в строке и удалить повторы. Я просмотрел link1 и link2 и попытался использовать их шаблоны, но они, похоже, не работают для меня.
Вот что у меня есть
String pattern = "\\b(\\w+)\\b\\s+\\1\\b";
Pattern p = Pattern.compile(pattern Pattern.CASE_INSENSITIVE);
//This is actually read from console
String input = "Goodbye bye bye world world world";
Matcher m = p.matcher(input);
while(m.fine())
{
System.out.println("group: " + m.group() + " start: " + m.start() + " end: " + m.end());
input = input.replaceAll(m.group(), m.group(1);
}
System.out.println(input);
И это мой выход:
группа: прощай старт: 8 Конец: 15 группа (1): До свидания
группа: начать мир мир: 16 конец: 27 группа (1): мир
Прощай прощай мир мир
Что я ожидаю, на 2-й линии выхода «группа: мир начать мир мир: 16 конец: 32.
Итак, ко мне, похоже, что это совпадение только первое повторное слово. Мое понимание шаблона - это \ b - граница слова, \ w + - на или больше слова (я не уверен, что это слово повторяется БЕЗ пробел, то есть словосочетание или одно или несколько слов, повторяющихся С пробел, то есть слово «слово»), затем \ b \ s + - за которым следует любое пустое пространство \ 1 - сгруппированное слово и, наконец, \ b - пробел снова.
Может кто-нибудь объяснить мне, что происходит и что это должно быть?
Спасибо!
AH! Благодаря! Но следить за моим пониманием - \ w + = словосочетание или словосочетание? – Victor
\ w обозначает любую букву, поэтому \ w + обозначает одну или несколько букв рядом друг с другом. Итак, \ b \ w + \ b обозначает первое слово, а \ s + \ 1 \ b обозначает слова, соответствующие первому слову после пробела. так \ w + = 'слово' (первое слово) –
Получил это. Таким образом, \ w является просто ярлыком для чего-то вроде [a-zA-Z] ... – Victor