Ruby 重新格式化日期

Ruby 重新格式化日期,ruby,regex,Ruby,Regex,我正在尝试重新格式化德语日期(例如,13.03.2011到2011-03-13) 这是我的代码: str = "13.03.2011\n14:30\n\nHannover Scorpions\n\nDEG Metro Stars\n60\n2 - 3\n\n\n\n13.03.2011\n14:30\n\nThomas Sabo Ice Tigers\n\nKrefeld Pinguine\n60\n2 - 3\n\n\n\n" str = str.gsub("/(\d{2}).(\d{2}).

我正在尝试重新格式化德语日期(例如,
13.03.2011
2011-03-13

这是我的代码:

str = "13.03.2011\n14:30\n\nHannover Scorpions\n\nDEG Metro Stars\n60\n2 - 3\n\n\n\n13.03.2011\n14:30\n\nThomas Sabo Ice Tigers\n\nKrefeld Pinguine\n60\n2 - 3\n\n\n\n"
str = str.gsub("/(\d{2}).(\d{2}).(\d{4})/", "/$3-$2-$1/")
我得到与输入相同的输出。我还尝试了我的代码,有无前导斜杠和结尾斜杠,但我看不出有什么区别。有什么提示吗

我试图将正则表达式存储在变量中,如
find=/(\d{2})。(\d{2})。(\d{4})/
replace=/$3-$2-$1/
,因此我的代码如下所示:

str = "13.03.2011\n14:30\n\nHannover Scorpions\n\nDEG Metro Stars\n60\n2 - 3\n\n\n\n13.03.2011\n14:30\n\nThomas Sabo Ice Tigers\n\nKrefeld Pinguine\n60\n2 - 3\n\n\n\n" 
find = /(\d{2}).(\d{2}).(\d{4})/
replace = /$3-$2-$1/
str = str.gsub(find, replace)

TypeError: no implicit conversion of Regexp into String
    from (irb):4:in `gsub'

对这个问题有什么建议吗?

第一个错误是regex分隔符。您不需要将正则表达式作为字符串放置。只需将它放在一个分隔符中,如
/

第二个错误是,您将捕获的组用作
$1
。将其替换为
\\1

str = str.gsub(/(\d{2})\.(\d{2})\.(\d{4})/, "\\3-\\2-\\1")
另外,请注意,我已将
字符转义为
\.
,因为在regex中
表示
除\n
以外的任何字符