我想从网页中提取不同格式的日期。我正在使用 Selenium2 Java API 与浏览器进行交互。我还使用 jQuery 进一步与文档进行交互。因此,欢迎使用两层的解决方案。
不同地区的日期格式可能大相径庭。此外,月份名称可以写成文本或数字。我需要匹配尽可能多的日期,而且我知道有很多组合。
例如,如果我有这样一个 HTML 元素:
<div class="tag_view">
Last update: May,22,2011
View :40
</div>
我希望提取并识别日期的相关部分:
May,22,2011
现在应该将其转换为常规的 Java Date 对象。
更新
这应该适用于任何网页的 HTML,日期可以包含在任何格式的任何元素中。例如,在 Stackoverflow 上,源代码如下所示:
<span class="relativetime" title="2011-05-13 14:45:06Z">May 13 at 14:45</span>
我希望它以最有效的方式完成,我想这将是一个返回标准化日期表示的 jQuery 选择器或过滤器。但我愿意接受您的建议。
最佳答案
由于我们不能将自己局限于任何特定元素类型或任何元素的子元素,所以您基本上是在谈论在整个页面的文本中搜索日期。以任何一种效率执行此操作的唯一方法是使用正则表达式。由于您要查找任何格式的日期,因此每种可接受的格式都需要一个正则表达式。一旦你定义了那些是什么,只需编译正则表达式并运行类似的东西:
var datePatterns = new Array();
datePatterns.push(/\d\d\/\d\d\/\d\d\d\d/g);
datePatterns.push(/\d\d\d\d\/\d\d\/\d\d/g);
...
var stringToSearch = $('body').html(); // change this to be more specific if at all possible
var allMatches = new Array();
for (datePatternIndex in datePatterns){
allMatches.push(stringToSearch.match(datePatterns[datePatternIndex]));
}
您可以通过谷歌搜索找到更多日期正则表达式,或者自己制作它们,它们非常简单。需要注意的一件事:您可能会结合上面的一些正则表达式来创建一个更高效的程序。我会非常小心,它可能会导致您的代码很快变得难以阅读。对每个日期格式执行一个正则表达式似乎更简洁。
关于java - 从网页中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100353/