gpt4 book ai didi

Ruby RegEx 用于搜索和替换

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:25 25 4
gpt4 key购买 nike

我有一个包含 SQL 转储行的文件。它的日期格式为 yyyy-mm-dd(例如 2012-08-13)

我想用标记替换所有这些日期,以便将来我可以使用所有以当时日期为中心的行填充数据库。

例如

  • 2012-08-13 我想更改为类似 $$MAINDATE$$
  • 的存储方式
  • 2012-08-14 我想成为 $$MAINDATE+1$$

通过这种方式,它们都是相对于单个日期存储的,并且数据在新的创建日期前后都有意义。

然后我想迭代文件并根据当时的参数将它们全部替换为新日期。并根据 +1 或 +100 或距离最后多少天调整日期。

我认为匹配文本是 /\d{4}-\d{2}-\d{2}/

但是我如何替换与新术语匹配的文本,以取代旧文本?

更新:

我用它来将标记改回日期。我怀疑它是否漂亮但它是否有效

#iterate each line and look for the marker
while (line = infile.gets)
str = line
#replace marker with data modified by the modifier
rules = Hash[str.scan(/(\$\$MAINDATE(\+|\-)\d{1,5}\$\$)/).uniq.collect do |e|
modifyValue = e[0].split(e[1])[1].gsub("$","").to_i
if e[1] == "-" then
modifyValue = modifyValue * -1
end
[e[0], (today + modifyValue).to_s]
end ]
rules.each do |key, value|
str.gsub!(key, value)
end
#write new line to array
finishedText.push str
end

最佳答案

像这样:

require 'date'
def munge_dates list, base_date = Date.today
date_regexp = /\d{4}-\d{2}-\d{2}/
list.map do |line|
days_difference = "%+d" % (Date.parse(line[date_regexp]) - base_date)
line.sub date_regexp,"$$MAINDATE#{days_difference}$$"
end
end

如果您不想在其中添加 $$MAINDATE+0$$,则需要​​添加一些条件逻辑。

关于Ruby RegEx 用于搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com