Регулярное выражение или Java преобразуют определенные области в нижнюю строку

#java #regex #replace #case #case-sensitive

#java #регулярное выражение #заменить #случай #с учетом регистра

Вопрос:

У меня есть фрагмент регулярного выражения "([A-Z]|_)*" для поиска значений атрибутов в верхнем регистре в документе xml. Я хотел бы перевести все результаты в нижний регистр. Я знаю, что могу ссылаться на найденную группу с $ знаком, но как я могу передать значение $ переменной в toLowerCase() функцию. Мне все равно, включает ли решение Java или простой текстовый редактор справится с задачей, потому что это одноразовая работа.

Спасибо.

Ответ №1:

Прежде всего, для этой конкретной задачи вам, вероятно, следует вместо этого использовать анализатор XML. Сказав это, с помощью регулярных выражений вы можете использовать Matcher для хранения захваченных групп:

 Pattern p = Pattern.compile("([A-Z]|_) "); 
String s = "test="UPPERCASE" other="lowercase" map="UPPER"";
Matcher m = p.matcher(s);
while (m.find()) {
  String group = m.group(0);
  System.out.println(group.toLowerCase());  // will print "uppercase" and "upper"
}
  

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

1. вы также можете использовать m.start() и m.end() для доступа к несогласованным частям. Т.Е. при первом совпадении вам нужно скопировать из 0 в индекс m.запустите() как есть, затем добавьте преобразованный нижний регистр и т.д. и т.п.