Помогите составить регулярное выражение, для определения страны в круглых скобках. Например даны строки:
(фасовка Германия)
Bk, 700 г, канистра ( Германия)
для HP LJ M203/M227" (ЛАКО, Германия)
, 76х76 ммНеобходимо вырезать только следующий текст: (ЛАКО, Германия), (фасовка Германия), ( Германия)
Шаблон: ^(.+)(\([^(]*\))([^()]*)$
Замена: \1\3
RegEx fiddle
на месте (Германия) может оказаться любое значение, которое будет компилиться в паттерне в момент определения
Ну так добавить его в шаблон...
Шаблон: ^(.+)(\([^(]*Германия[^(]*\))([^()]*)$
Замена: \1\3
RegEx fiddle
В регулярке задал шаблоны поиска с скобками. При успешном нахождении удаляем:
String[] items = {
"Тонер Imex Универсальный для Samsung, Тип SML (фасовка Германия) Bk, 700 г, канистра",
"Дозирующее лезвие (Германия) для HP LJ M203/M227",
"Блок самоклеящийся LACO (ЛАКО, Германия), 76х76 мм",
"Блок самоклеящийся LACO (Germany), 76х76 мм",
};
Pattern pattern = Pattern.compile("\\((\\w+ \\w+)\\)|\\((\\w+)\\)|\\((\\w+, \\w+)\\)", Pattern.UNICODE_CHARACTER_CLASS);
for (String text : items) {
System.out.println(text);
Matcher m = pattern.matcher(text);
if (m.find()) {
System.out.println(m.group(0));
text = m.replaceAll("");
System.out.println(text);
}
System.out.println();
}
Консоль:
Тонер Imex Универсальный для Samsung, Тип SML (фасовка Германия) Bk, 700 г, канистра
(фасовка Германия)
Тонер Imex Универсальный для Samsung, Тип SML Bk, 700 г, канистра
Дозирующее лезвие (Германия) для HP LJ M203/M227
(Германия)
Дозирующее лезвие для HP LJ M203/M227
Блок самоклеящийся LACO (ЛАКО, Германия), 76х76 мм
(ЛАКО, Германия)
Блок самоклеящийся LACO , 76х76 мм
Блок самоклеящийся LACO (Germany), 76х76 мм
(Germany)
Блок самоклеящийся LACO , 76х76 мм
Сделал так:
private String removeCountry(String name) {
//проход по справочнику стран
for (String c : CountyDictionaries.countries) {
String p = String.format("\\(.*%s\\)", c);
Pattern pattern = Pattern.compile(p);
Matcher matcher = pattern.matcher(name);
if (matcher.find()) {
String founded = matcher.group();
String toDelete = founded.substring(founded.lastIndexOf("("),
founded.lastIndexOf(")") + 1);
return name.replace(toDelete, "")
.replaceAll("\\s+", " ")
.replaceAll(",{2}", "\\,");
}
}
return name;
}
Вывод:
Было : Маркер универсальный для любой гладкой поверхности со стирателем STAEDTLER (Германия), ЧЕРНЫЙ, 1 мм, 305 M-9
Станет: Маркер универсальный для любой гладкой поверхности со стирателем STAEDTLER, ЧЕРНЫЙ, 1 мм, 305 M-9
=========================================
Было : Маркер перманентный (нестираемый) STAEDTLER (Германия) Lumocolor, КРАСНЫЙ, круглый наконечник, 0,4 мм, 313-2
Станет: Маркер перманентный (нестираемый) STAEDTLER Lumocolor, КРАСНЫЙ, круглый наконечник, 0,4 мм, 313-2
=========================================
Было : Карандаш механический LACO (ЛАКО, Германия), корпус черный, ластик, 0,5 мм, MP 12
Станет: Карандаш механический LACO, корпус черный, ластик, 0,5 мм, MP 12
=========================================
Было : Набор STAEDTLER (Германия), карандаши чернографитные 5 шт. (НВ), резинка стирательная, 120 A SBKD10
Станет: Набор STAEDTLER, карандаши чернографитные 5 шт. (НВ), резинка стирательная, 120 A SBKD10
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Имеется приложение с разными контролами в которые можно вводить текстХочу что бы когда активировалась клавиатура скрыть курсор
У меня есть класс ClassNameНапример, я обращаюсь к нему ClassName
Встал на Вводе/Выводе поток байтНужно написать метод, который принимает InputStream и OutputStream, считывает все байты из inputStream и записывает в OutputStream...