代替我試圖替換包含應該是什麼日期字符串的一部分,但它可能是在不允許的格式。具體而言,所有日期的格式爲「mm/dd/YYYY」,並且需要採用「YYYY-mm-dd」格式。一個需要注意的是,原始日期可能不是,其確切地說是以mm/dd/YYYY格式;有些像「5/6/2015」。例如,如果斯卡拉正則表達式查找/有額外的格式
val x = "where date >= '05/06/2017'"
然後
x.replaceAll("'([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})'", "'$3-$1-$2'")
執行所需的更換(返回 「2017年5月6日」),但對於
val y = "where date >= '5/6/2017'"
這並不返回所需的替換(返回「2017-5-6」 - 對我來說,表示無效)。隨着約達時間包裝nscala-time
,我試圖捕捉的日期,然後重新格式化它們:
import com.github.nscala_time.time.Imports._
import org.joda.time.DateTime
val f = DateTimeFormat.forPattern("yyyy-MM-dd")
y.replaceAll("'([0-9]{1,2}/[0-9]{1,2}/[0-9]{4})'",
"'"+f.print(DateTimeFormat.forPattern("MM/dd/yyyy").parseDateTime("$1"))+"'")
但是失敗了java.lang.IllegalArgumentException: Invalid format: "$1"
。我也嘗試使用f
插補器和填充0,但它似乎並不喜歡這一點。
您是否無法對replaceAll
內的捕獲組($1
等)執行其他處理?如果不是,我還能如何實現預期的結果?