Java正则表达式,捕获格式错误的html

Java正则表达式,捕获格式错误的html,java,regex,Java,Regex,我需要解析超链接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 4262

我需要解析超链接
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
29-Oct-2019 15:36 42621256074
2019年10月29日11:51 63776436005
2019年10月30日22:46 84032013058
2019年10月30日13:12 108976436346
2019年10月30日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));
String html=this.doc.html();
String patternString=“(最新的all.json.gz)(*)”;
Pattern=Pattern.compile(patternString);
Matcher Matcher=pattern.Matcher(html);
System.out.println(matcher.group(0));
但它没有记录日期。有人能给我推荐一个与期望日期相匹配的正则表达式吗

编辑:也尝试了
(最新[-]all[.]json[.]bz2)[

]*(.*)
但不起作用查看当前正则表达式:

String patternString = "(latest-all\\.ttl\\.gz<\\/a>)(.*)";
String patternString=“(最新的all\\.ttl\\.gz)(.*);
这匹配一个字符串,其形式为
latest all.ttl.gz
,后跟一些东西,我认为这不是您想要的

首先,在您共享的源HTML中,没有出现“latest all.ttl.gz”(我相信您的意思是查找“latest all.json.bz2”)。第二,正斜杠不需要在正则表达式中转义

因此,考虑到这一点,一个应该做到这一点的正则表达式是:

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

(我添加了
[\\n]*
部分以排除
标记和日期之间的任何新行)。

您可以使用如下正则表达式:

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

从您提供的html中,没有与JSOUP匹配的数据
最新的all.ttl.gz
,您应该能够遍历到
标记,然后请求下面的
.text()
。您可以使用正则表达式处理
.text()
节点的内容以提取日期。我不相信这与字符串匹配,不幸的是,这让我感到困惑,因为我希望这样做,它与我尝试的内容非常接近,除了在我的脚本中检查了一个输入错误之外,您还需要调用
matcher.find()方法,然后再尝试获取结果。@qwertyuiop哦,我犯了一个小错误。将我答案中的
\n
替换为
\\n
(因为它是一个Java字符串,我们需要转义反斜杠)。