regex для определения страны в скобках

169
10 июня 2021, 15:00

Помогите составить регулярное выражение, для определения страны в круглых скобках. Например даны строки:

  1. Тонер Imex Универсальный для Samsung, Тип SML (фасовка Германия) Bk, 700 г, канистра
  2. Дозирующее (текст который нужно оставить) лезвие ( Германия) для HP LJ M203/M227"
  3. Блок самоклеящийся LACO (ЛАКО, Германия), 76х76 мм

Необходимо вырезать только следующий текст: (ЛАКО, Германия), (фасовка Германия), ( Германия)

Answer 1

Шаблон: ^(.+)(\([^(]*\))([^()]*)$

Замена: \1\3

RegEx fiddle

на месте (Германия) может оказаться любое значение, которое будет компилиться в паттерне в момент определения

Ну так добавить его в шаблон...

Шаблон: ^(.+)(\([^(]*Германия[^(]*\))([^()]*)$

Замена: \1\3

RegEx fiddle

Answer 2

В регулярке задал шаблоны поиска с скобками. При успешном нахождении удаляем:

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 мм
Answer 3

Сделал так:

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
READ ALSO
Скрыть курсор при вводе текста

Скрыть курсор при вводе текста

Имеется приложение с разными контролами в которые можно вводить текстХочу что бы когда активировалась клавиатура скрыть курсор

135
Кириллица в HTML в Spring MVC проекте

Кириллица в HTML в Spring MVC проекте

Делаю свой сайт на спрингеВсё работает

163
Как получить название метода после ClassName…?

Как получить название метода после ClassName…?

У меня есть класс ClassNameНапример, я обращаюсь к нему ClassName

103
Как записать в OutputStream только четные индексы?

Как записать в OutputStream только четные индексы?

Встал на Вводе/Выводе поток байтНужно написать метод, который принимает InputStream и OutputStream, считывает все байты из inputStream и записывает в OutputStream...

132