Страницы

Поиск по вопросам

понедельник, 17 июня 2019 г.

CamelCase регулярка

Есть текст в формате:
Люблю_грозу в_начале_Мая, "Когда весенний_первый_Гром", как бы Резвяся_и Играя, Грохочет в_небе_голубом.
Должно стать:
ЛюблюГрозу вНачалеМая, "Когда весенний_первый_Гром", как бы РезвясяИ Играя, Грохочет вНебеГолубом.
Поясню, нужно убрать все подчеркивания, кроме тех что в кавычках, там все должно быть без изменений. С великой подачи мастера регулярных выражений (sercxjo) мы смогли разобраться с подчеркиванием ("_(?=([^\"]*[^\\\\])(\"([^\"\\\\]|\\\\\\.)*\"[^\"]*)*$)"), но теперь нам надо написать регулярку которая подымает регистр букв стоящих после подчеркивания, но так же не трогает текст в кавычках.


Ответ

Вам нужен класс Matcher, код примерно следующий:
public static void main(String[] args) throws InterruptedException { String regex = "_[а-яА-ЯёЁъЪ](?=([^\"]*[^\\\\])(\"([^\"\\\\]|\\\\.)*\"[^\"]*)*$)"; String str = "Люблю_грозу в_начале_Мая, \"Когда весенний_первый_Гром\", как бы Резвяся_и Играя, Грохочет в_небе_голубом."; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str);
while (matcher.find()){ String s = str.substring(matcher.end()-1,matcher.end()).toUpperCase(); str = str.replace(str.substring(matcher.start(), matcher.end()),s); matcher.reset(str); }
System.out.println(str); }
Единственное, я забыл как получить сразу совпадения по регулярке, поэтому код можно улучшить.

Комментариев нет:

Отправить комментарий