Регулярное выражение для соответствия амперсанду между двумя однобуквенными словами - PullRequest
0 голосов
/ 01 августа 2020

Я хочу заменить амперсанд, если он находится между двумя однобуквенными словами.

Ниже приведено регулярное выражение, которое я использую, но оно также соответствует словам, состоящим из двух или более букв.

([A-Za-z]{1})((\s&\s)|(&)|(\s&)|(&\s))([A-Za-z]{1})

Кроме того, между буквами могут быть пробелы.

Например:

  1. A и B Следует заменить как AB
  2. A и B Следует заменить как AB
  3. A и B Следует заменить как AB
  4. ALPHA и B не должны совпадать. (Поскольку АЛЬФА - это слово)
  5. АЛЬФА и БЕТА Не должны совпадать. (Поскольку АЛЬФА и БЕТА оба слова)

1 Ответ

2 голосов
/ 01 августа 2020

Вы можете использовать

String result = s.replaceAll("(\\b[A-Za-z])\\s*&\\s*(?=[A-Za-z]\\b)", "$1")

Примечание: [A-Za-z] можно заменить на \\p{Alpha} (для соответствия любой букве ASCII) или \\p{L}) (для соответствия любой букве Unicode).

См. Демонстрацию regex . Подробности

  • (\b[A-Za-z]) - Группа 1: граница слова и буква
  • \s*&\s* - &, заключенный в 0 или более пробелов
  • (?=[A-Za-z]\b) - положительный просмотр вперед (чтобы разрешить совпадение с перекрытием), который требует буквы, за которой следует граница слова, непосредственно справа от текущего местоположения.

Чтобы сохранить первое в результате будет слово из одной буквы, шаблон замены содержит $1 заполнитель.

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