Нужно удалить из строки всё, кроме слова Windows, пробелов и цифр
Вот какой код есть, но не знаю что написать в регулярке, чтоб удаляло то что мне надо
String str1 = "BATTERY_CAPACITY=1, OS=Windows, MEMORY_ROM=4000, SYSTEM_MEMORY=1000, CPU=1.2, DISPLAY_INCHS=18";
String str2 = str1[1].replaceAll("[^(0-9\\.\s)]|[^Windows]","");
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Очевидно в данной задаче нужно выбрать "значения" из пар ключ=значения, удаляя запятые и оставляя пробелы.
Такую задачу решить гораздо проще при помощи следующих выражений:
String str1 = "BATTERY_CAPACITY=1, OS=Windows, MEMORY_ROM=4000, SYSTEM_MEMORY=1000, CPU=1.2, DISPLAY_INCHS=18";
// удалить все символы до знака `=` кроме пробелов или запятые
String str2 = str1.replaceAll("[^=\\s]+=|,", "");
System.out.println(str2);
// -> 1 Windows 4000 1000 1.2 18
// удалить заглавные буквы/`_` и знак `=` или запятые
String str3 = str1.replaceAll("[A-Z_]+=|,", "");
System.out.println(str3);
// -> 1 Windows 4000 1000 1.2 18
Также можно отфильтровать входную строку и выбрать из неё необходимые совпадения Windows или последовательности из цифр, пробелов, и точек:
Pattern p = Pattern.compile("Windows|[\\s\\d\\.]+");
String str2 = p.matcher(str1).results()
.map(MatchResult::group)
.collect(Collectors.joining());
// -> 1 Windows 4000 1000 1.2 18
Или же можно искать любые значения после знака =, разделённые запятыми (оба вида разграничителей помещаются в группы без захвата (?:)):
Pattern p = Pattern.compile("(?:=)([^,]+)(?:,?)(\\s*)");
String str4 = p.matcher(str1).results()
.map(mr -> mr.group(1) + mr.group(2)) // группа 1 - значение, 2 - пробелы
.collect(Collectors.joining());
// -> 1 Windows 4000 1000 1.2 18