我一直在努力创建一个适合我对HTML的需求一段时间的正则表达式。我使用java.util.regex。*包,出于不同的原因,我需要使用这个包而不是任何第三方库。
我想要的是提取标签内的数据,因此我想要的数据是25/25,Lindhagen,0,Spinninghall,35和Test Person。
是否可以为此创建正则表达式?
<div id="rsv_detail">
<hr />
<label>Bokningsstatus</label>
<span> </span>
<label>Bokningar</label>
<span>25 / 25 </span>
<br />
<label>Plats</label>
<span>Lindhagen </span>
<label>Anlänt</label>
<span>0 </span>
<br />
<label>Sal</label>
<span>Spinninghall </span>
<label>Max antal</label>
<span>35 </span>
<br />
<label>Ledare</label>
<span>Test Person </span>
<br /><br />
<label>Visa mer</label>
<span>
<a href="/index.php?instructors%5B%5D=X129518&func=la&tak=0.36507500+1302460619">Ledare</a>
<a href="/index.php?locations=LI&func=la&tak=0.36507500+1302460619">Plats</a>
<a href="/index.php?activities=SP_MEDEL&func=la&tak=0.36507500+1302460619">Aktivitet</a>
</span>
<br /><br />
<br />
<br />
<hr />
</div>
答案 0 :(得分:4)
据我所知,从HTML中提取信息的最佳方法是使用HTML解析器或将HTML转换为XHTML并通过标准XML技术提取它。为什么不能使用第三方库?
答案 1 :(得分:1)
Pattern p = Pattern.compile("<span>([^<&]+) </span>");
Matcher m = p.matcher(text);
while (m.find())
{
System.out.println(m.group(1));
}
输出:
25 / 25
Lindhagen
0
Spinninghall
35
Test Person
这假设目标<span>
始终以
结尾,并且从不包含任何其他实体或元素。
答案 2 :(得分:0)
如果过滤掉未打开的每一行并关闭同一行中的span-tag,您可以使用:
filtered.replaceAll ("<span>([^<]*)</span>", "$1")
.replaceAll (" ", "")
paranteheses构建了一个捕获组,您稍后将按照第一个数字从左到右引用数字 - 这里只有一个,因此为1美元。在开始标记之后,您将读取除了^一个小于号以外的所有内容,您希望它是结束标记,直到结束标记。
然而,在大多数情况下,我会同意stema和Hovercraft Full Of Eels。 html中正则表达式的陷阱是:
然而,极少数情况下,正则表达式很有用:
答案 3 :(得分:0)
'<span>(.*?)&</span>'
作为RE会做,不是吗?