Добавьте символ в конце каждого слова, используя регулярное выражение - PullRequest
0 голосов
/ 19 июня 2020

Я ищу RegEx (Java), который будет добавлять '~' char после конца каждого слова.
Мое требование:

  1. Добавить ~ в конце каждого слова
  2. Если слово содержит какой-либо специальный символ, то не добавляйте '~'.
  3. Если имеется несколько пробелов, оно должно быть обрезано до одного пробела.

Пожалуйста, взгляните на мой пример ниже:

Input: Hello World   How* A1e Y?u
Output: Hello~ World~ How* A1e~ Y?u

Я воспользовался помощью на форуме и смог добиться ее, но не могу достичь # 2.
Моя Фрагмент кода:

pattern = ([^\\s][a-zA-Z0-9])(\\s|$);
pattern.matcher(searchTerm).replaceAll("$1~$2");

Как я могу пропустить операцию добавления, если в слове есть специальный символ? Пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 14 августа 2020

Это может помочь:

public static void main(String[] args) {
    String input = "Hello World   How* A1e Y?u word";
    String extraSpaceInput = String.format(" %s ", input.replaceAll("\\s+", "  "));
    // Wanted output: Output: Hello~ World~ How* A1e~ Y?u word

    Pattern pattern = Pattern.compile("\\s([a-zA-Z0-9]+)\\s");
    String output = pattern.matcher(extraSpaceInput).replaceAll("$1~ ");
    String cleanedUpOutput = output.replaceAll("\\s+", " ").trim();

    // My output: "Hello~ World~ How* A1e~ Y?u word~"
    System.out.println("My output: \"" + cleanedUpOutput + "\"");
}
0 голосов
/ 19 июня 2020

Я предлагаю использовать

searchTerm = searchTerm.replaceAll("(?<!\\S)\\w++(?!\\S)", "$0~").replaceAll("\\s{2,}", " ").trim();

См. Java демонстрацию

Подробности

  • (?<!\S) - отрицательный просмотр назад с проверкой наличия пробела или начала строки прямо перед текущим местоположением
  • \w++ - 1 или более символов слова
  • (?!\S) - отрицательный просмотр вперед убедитесь, что сразу после текущего местоположения есть пробел или начало строки.

$0 - это все значение соответствия.

Часть .replaceAll("\\s{2,}", " ") (для обычных пробелов просто замените \\s пробелом) часть «сжимает» любые два или более пробельных символа до одного пробела, а часть .trim() обрезает результат из пробелов на оба конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...