Регулярное выражение, удаляющее все слова короче, чем n

Реализуйте функцию, которая, учитывая связанный список, который может быть круговым, подкачивает первые два элемента, третье с четвертым, и т.д.

8
задан janesconference 26 September 2009 в 00:07
поделиться

4 ответа

I ' У нас он работал достаточно хорошо, но потребовалось два прохода.

public static void main(String[] args) {
    String passage = "Well, I'm looking for a regexp in Java that deletes all words shorter than 3 characters.";
    System.out.println(passage);

    passage = passage.replaceAll("\\b[\\w']{1,2}\\b", "");
    passage = passage.replaceAll("\\s{2,}", " ");

    System.out.println(passage);
}

Первый проход заменяет все слова, содержащие менее трех символов, одним пробелом. Обратите внимание, что мне пришлось включить апостроф в класс символов, чтобы исключить его, потому что слово «Я» доставляло мне проблемы без него. Вы можете найти в своем тексте другие специальные символы, которые вам также необходимо включить сюда.

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

Вывод:

Что ж, я ищу регулярное выражение в Java, которое удаляет все слова короче 3 символов .

Ну, ищу регулярное выражение Java, которое удаляет все слова короче символов.

11
ответ дан 5 December 2019 в 10:43
поделиться

Попробуйте: \ b \ w {1,2} \ b , хотя вам все равно придется избавиться от двойных пробелов, которые будут появляться.

1
ответ дан 5 December 2019 в 10:43
поделиться

Если вы не хотите, чтобы пробелы совпадали, вы можете использовать

\b\w{1,2}\b

, чтобы получить границы слов.

У меня это работает в RegexBuddy с использованием вкуса Java; для тестовой строки

«Собака - забавная кошка»

выделяется «is» и «a». То же самое для слов в начале / конце строки.

Вы можете опубликовать образец кода.

(И, как только что опубликовал GameFreak, вы все равно получите двойные пробелы.)

EDIT :

\b\w{1,2}\b\s?

- еще один вариант. Это частично решит проблему с удалением пробелов, хотя слова в конце строки или после знаков препинания по-прежнему могут вызывать проблемы. Например, "Собака - развлечение, не так ли?" становится "собачьим развлечением?" В любом случае у вас по-прежнему будут проблемы с использованием заглавных букв (собака теперь должна быть Dog).

3
ответ дан 5 December 2019 в 10:43
поделиться

Если у вас есть такая строка:

hello there my this is a short word

Это регулярное выражение будет соответствовать всем словам в строке длиной не менее 3 символов:

\w{3,}

Результатом:

hello there this short word

Это На мой взгляд, это самый простой подход. Зачем пытаться сочетать то, что вам не нужно, если вы можете сопоставить то, что хотите, намного проще? Никаких двойных пробелов, лишних слов и знаков препинания. Другие подходы разбиваются на несколько пробелов и не очень надежны.

1
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: