重新格式化日期

时间:2014-03-22 15:07:03

标签: ruby regex

我试图重新格式化德语日期(例如13.03.20112011-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'

对此问题的任何建议?

1 个答案:

答案 0 :(得分:1)

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

之类的分隔符中即可

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

str = str.gsub(/(\d{2})\.(\d{2})\.(\d{4})/, "\\3-\\2-\\1")

此外,请注意我已使用.转义\.个字符,因为正则表达式.表示any character except \n