给定一个特定的日期,是否有一种方法可以在不知道日期是以哪种格式书写的情况下在自由文本文档中搜索该日期?
Given a particular date, is there a way to search for that date in a free text document without knowing in which format the date is written?
假设我有一个特定的日期,比如January 10, 2013
。
我想能够搜索文本或html文档,看看它是否包含对该日期的引用。我想说明日期是多种格式中的任何一种,例如:
1/10/2013
01/10/13
2013-01-10
10-Jan-2013
January 10, 2013
Jan 10, 2013
…对于January 10, 2013
,应该都产生一个(+)匹配结果。
我意识到交换日-月顺序可能会有问题,但在这种情况下,我愿意接受假阳性结果,即:
01-10-2013
10-01-2013
…在我的情况下,January 10, 2013
都可以接受。
是否有一个既定的算法实现在任何语言中,执行这种广义的,但不平凡的,搜索?我的首选是Ruby或JavaScript,但我对任何经过深思熟虑的示例都感兴趣。附录# 1
我看到这个代码:
def validate_date(date_str)
valid_formats = ["%m/%d/%Y", "%m/%d/%Y %I:%M %P"]
#see http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime for more
valid_formats.each do |format|
valid = Time.strptime(date_str, format) rescue false
return true if valid
end
return false
end
。
…这将是处理日期的数字表示的好方法。这样一来,Month的名字就无从得知了。由于1,01,Jan和January都代表一年的第一个月,我想知道大量的排列是否在其他地方得到了很好的处理。
我不知道有任何预先存在的解决方案,但是编写自己的解决方案并不复杂。创建一个包含要搜索的日期格式的数组,然后简单地遍历这些格式,格式化日期并搜索文档:
require 'date'
formats = ["%-m/%e/%Y",
"%m/%d/%Y",
"%Y-%m-%d",
"%d-%b-%Y",
"%B %d, %Y",
"%b %d, %Y"]
d = Date.new(2013, 1, 10)
formats.each do |format|
search_string = d.strftime(format)
# Do your search for `search_string`
end
Update:一种更复杂、更有效的方法是将搜索字符串转换为Regexp:
require 'date'
formats = ["%-m/%e/%Y",
"%m/%d/%Y",
"%Y-%m-%d",
"%d-%b-%Y",
"%B %d, %Y",
"%b %d, %Y"]
d = Date.new(2013, 1, 10)
regex = Regexp.union(formats.map{|f| Regexp.new(Regexp.quote(d.strftime(f)))})
# Search document for regex
相关文章:
- 比较从函数和生成的日期对象
- Json数据包含日期和时间格式
- Javascript日期格式类似于ISO,但本地
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 如何在JavaScript中延长当前日期
- 两位数的月份日期验证
- 更改angularjs中的日期-时间格式
- Html画布自由转换
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 将日期时间从json转换为可读格式
- NodeJS日期格式不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 使用当前日期生成随机id
- primefaces日历可以禁用过去的日期和时间吗
- 提前阅读日期
- 在JavaScript中拆分日期字符串的更好方法是什么
- 查找最短和最长日期
- 如何在自由标记模板或javascript中以特定格式转换日期
- 解析网页上的自由格式日期条目
- 给定一个特定的日期,是否有一种方法可以在不知道日期是以哪种格式书写的情况下在自由文本文档中搜索该日期?