Java регулярное выражение, захват неправильно сформированного HTML - PullRequest
0 голосов
/ 04 ноября 2019

Мне нужно разобрать дату после гиперссылки latest-all.json.bz2, которая 29-Oct-2019 15:36 именно с этого сайта: https://dumps.wikimedia.org/wikidatawiki/entities/

, если вы посмотрите на исходный HTML-код сайта:

<a href="latest-all.json.bz2">latest-all.json.bz2</a>                                29-Oct-2019 15:36         42621256074
<a href="latest-all.json.gz">latest-all.json.gz</a>                                 29-Oct-2019 11:51         63776436005
<a href="latest-all.nt.bz2">latest-all.nt.bz2</a>                                  30-Oct-2019 22:46         84032013058
<a href="latest-all.nt.gz">latest-all.nt.gz</a>                                   30-Oct-2019 13:12        108976436346
<a href="latest-all.ttl.bz2">latest-all.ttl.bz2</a>                                 30-Oct-2019 15:43         52462636586

вы увидите, что с ним не связано никакого тега, поэтому я не могу перехватить его с помощью Jsoup. Вместо этого я попытался использовать этот регистр, например:

String html = this.doc.html();
        String patternString = "(latest-all.json.gz<\/a>)(.*)";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(html);
        System.out.println(matcher.group(0));

, но он не фиксирует дату. Может кто-нибудь предложить мне регулярное выражение, которое будет соответствовать желаемой дате?

РЕДАКТИРОВАТЬ: также пытался (latest[-]all[.]json[.]bz2</a>)[ ]*(.*), но не работает

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Вы можете использовать регулярные выражения следующим образом:

\S+ \d{2}:\d{2}

Рабочая демонстрация

0 голосов
/ 04 ноября 2019

Глядя на ваше текущее регулярное выражение:

String patternString = "(latest-all\\.ttl\\.gz<\\/a>)(.*)";

Это соответствует строке вида latest-all.ttl.gz<\/a>, за которой следует что-то, что я не верю, что вы хотите.

СначалаВ исходном HTML-коде, которым вы поделились, не встречается ни слова «latest-all.ttl.gz» (я полагаю, вы хотели вместо этого искать «latest-all.json.bz2»). И, во-вторых, косые черты не нужно экранировать в регулярном выражении.

Итак, имея это в виду, регулярное выражение, которое должно сделать трюк:

String patternString = "(latest-all\\.json\\.bz2</a>)[\\n]*(.*)";

(я добавил [\\n]*часть, чтобы исключить любые новые строки между тегом <a> и вашей датой).

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