REGEX, удалить пробелы и все остальные символы - PullRequest
0 голосов
/ 27 апреля 2018

пытается преобразовать этот пример

Some Nice Article on amazon https://www.amazon.de/gp/product/ADKLHJADK/ref=as_li_ss_tl?ie=UTF8&pd_rd_i=B01J7LLL9Q&pd_rd_r=a8c7bb4b-49da-11e8-ad28-014ae5dc2f42&pd_rd_w=9QOk2&pd_rd_wg=zc1s7&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=&pf_rd_r=VF3C7MDNZ741H8S13AYV&pf_rd_t=36701&pf_rd_p=1c175abe-9bc7-490b-bbe1-2caf7e752c98&pf_rd_i=desktop&linkCode=ll1

к этому

https://www.amazon.de/gp/product/YXZ91ALI91/

Какой правильный или лучший способ справиться с этим в Java с помощью регулярных выражений? потому что мой вариант выглядит очень грязным ...

https://www.amazon.de/gp/product/[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]/

Рабочее решение для получения ссылки amazon:

Первая часть до | для каждой копии и вставки на рабочем столе, а все, что после, - для копирования с помощью кнопки «Поделиться» в мобильном приложении.

https://www.amazon.de/gp/product/[^/]+/?|https://www.amazon.de/dp/[^/]+/

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Есть много подходов. Этот подход работает при условии, что это раздел после продукта.

 Pattern pat = Pattern.compile("^.*(https://.*/product/[^\\/]*?/).*");

Пример:

public static void main(String[] args)
{
    String inp = "Some Nice Article on amazon "
            + "https://www.amazon.de/gp/product/ADKLHJADK/ref=as_li_ss_tl"
            + "?ie=UTF8&pd_rd_i=B01J7LLL9Q&pd_rd_r"
            + "=a8c7bb4b-49da-11e8-ad28-014ae5dc2f42&pd_rd_w"
            + "=9QOk2&pd_rd_wg=zc1s7&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_s=&pf_rd_r"
            + "=VF3C7MDNZ741H8S13AYV&pf_rd_t="
            + "36701&pf_rd_p=1c175abe-9bc7-490b-bbe1-2caf7e752c98&pf_rd_i"
            + "=desktop&linkCode=ll1";


    Pattern pat = Pattern.compile("^.*(https://.*/product/[^\\/]*?/).*");

    Matcher m = pat.matcher(inp);

    if (m.matches() && m.groupCount() > 0) {
        System.out.println(m.group(1));
    }

}

Идея состоит в том, чтобы найти начало "https:", затем что-нибудь, затем "product /", затем что-нибудь до следующего "/".

Результирующий вывод:

https://www.amazon.de/gp/product/ADKLHJADK/

0 голосов
/ 27 апреля 2018

Однолинейное решение:

String result = myStrValue.replaceAll('.*(https://www\.amazon\.de/gp/product/\w+/).*', '$1');.

\ w + означает хотя бы один символ слова: [a-zA-Z_0-9]

Попробуйте регулярное выражение Java здесь: https://www.freeformatter.com/java-regex-tester.html#ad-output

0 голосов
/ 27 апреля 2018

Ваше регулярное выражение будет выглядеть так:

https:\/\/www.amazon.de\/gp\/product\/[^\/]+\/?

[^\/] означает «все, что не косая черта»

Вы можете проверить это здесь: https://regex101.com/r/wwFmMw/1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...