Причина , которая не работает, заключается в том, что в вашем регулярном выражении есть пробелы в начале и в конце. Как только «A B C» становится «AB C», B больше не имеет начального пробела - там есть «A».
Самым простым решением было бы вынуть их и использовать s/([A-Z]) ([A-Z])/\1\2/g
, которые должны отвечать заявленным требованиям, но это также превратило бы все заглавные фразы в один блок букв (например, «ЭТО ИСПЫТАНИЕ» -> "THISISATEST"), что может быть неприемлемо для вас.
Если вам нужно свернуть только отдельные заглавные буквы, а не их группы (например, «ДЛЯ ИМАТИЧЕСКОГО ИСПЫТАНИЯ» -> «ДЛЯ ИМА ИСПЫТАНИЯ», а не «ФОРМИРОВАНИЕ»), то я не думаю, что это возможно с одним регулярное выражение. Вам нужно будет сделать это за два прохода, один для того, чтобы отметить, какие пробелы нужно свернуть, а второй для фактического удаления меток (например, «ДЛЯ ТЕСТА IMA» -> «ДЛЯ ТЕСТА I ^ M ^ A» -> «ДЛЯ IMA»). ТЕСТ "), потому что в противном случае вы не сможете различить пару заглавных букв, которые изначально были парными, и пару, которые изначально были разделены пробелом, но уже свернуты.