我正在尝试解析文件并替换某些日期/日期。
例如, 我想改变
In a post on the band's blog last night (06.05.12)
to
In a post on the band's blog sunday night
我正在尝试使用gsub!这样做。
r.gsub!(/\blast night \(([0-3][0-9]\.[0-1][0-9]\.[0-9][0-9])\)/ei,Date.strptime('\1',"%d.%m.%y").strftime("%A").to_s + ' night')
总是说无效日期,但
r.gsub!(/\blast night \(([0-3][0-9]\.[0-1][0-9]\.[0-9][0-9])\)/ei,'\1')
显示正确的日期为06.05.12 和
mydate = '06.05.12'
r.gsub!(/\blast night \(([0-3][0-9]\.[0-1][0-9]\.[0-9][0-9])\)/ei,Date.strptime(mydate,"%d.%m.%y").strftime("%A").to_s + ' night')
给了我适当的回应。使用Date.strptime时为什么不用\ 1替换mydate?关于如何解决这个问题的任何建议?
答案 0 :(得分:1)
您似乎尝试在日期函数中引用匹配组。但这不起作用。如果替换简单字符串,则语法仅可用。 gsub
函数替换传递的字符串中的所有引用,但仅在它实际传递给函数时。您的代码等同于
replacement = Date.strptime('\1',"%d.%m.%y").strftime("%A").to_s + ' night'
r.gsub!(/\blast night \(([0-3][0-9]\.[0-1][0-9]\.[0-9][0-9])\)/ei, replacement)
“替换”因此无效,因为'\1'
不是有效日期。 gsub替换仅适用于strftime
函数返回的字符串。但是,您可以使用 magic 匹配变量自动设置匹配组:
r.gsub!(/\blast night \(([0-3][0-9]\.[0-1][0-9]\.[0-9][0-9])\)/ei) {
Date.strptime($1,"%d.%m.%y").strftime("%A").to_s + ' night'
}
请注意,我在$1
参数中写了\1
而不是strptime