我主要是一名SQL程序员,对Java有轻微的经验。
直到现在为止,我不会对我编写的所有有效代码感到无聊。但是在这一点上,我试图从股票市场站点中提取数据,并将该数据放入创建CSV的文件中。
我正在逐行检索html代码,该代码使用td和/ td打开和关闭列。我想获取大于号和小于号之间的数据,然后转到下一个。只是努力弄清楚这一点,而又不会使其变得太复杂。
描述预期和实际结果:
如果我有
<td class="blah" class="blah">STOCK</td><td class="blah" class="blah">STOCK COMPANY NAME</td>
我想将STOCK提取为字符串,然后再选择STOCK公司名称。
我想要提供的帮助只是> ***** <...之间的代码,因为我很喜欢学习过程,所以被困了几个小时。
答案 0 :(得分:4)
您可以将正则表达式与后视和前瞻结合使用-(?<=>).*?(?=<)
。
(?<=>)
表示后跟大于符号
.*?
匹配任意数量的字符,非贪心
(?=<)
后跟一个小于号
String input = "<td class=\"blah\" class=\"blah\">STOCK</td><td class=\"blah\" class=\"blah\">STOCK COMPANY NAME</td>";
Matcher matcher = Pattern.compile("(?<=>).*?(?=<)").matcher(input);
List<String> res = new ArrayList<>();
while (matcher.find()) res.add(matcher.group());
res = res.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList()); //remove empty strings
System.out.println(res);
输出
[STOCK, STOCK COMPANY NAME]
注意:最好改用HTML解析器,例如jsoup。