ruby - 插入字符串并保留原​​始变量状态

标签 ruby regex string

我正在根据数据库转储生成的名称文本文件重命名文件。我正在做一个目录列表并检查每个目录是否包含“_P2.PSD”。如果文件包含该子字符串,我将遍历 3 个不同的下划线所在的位置,并查看该字符串是否存在于文件中。如果我找到基于文件内容的匹配项,我将使用该格式重命名图像。

部分代码如下:

Dir.glob("#{directory}").each do |file|
  if "#{file.include? ("_P2")}" == "true"
    if File.readlines("#{db_Dump}").grep(/#{file.insert(-11, '_')}/).size > 0
      logger.info{"#{file}"}
      #mod_file =   file.insert(-11, '_')
      #logger.info{"#{file} -> #{mod_file}"}
    elsif File.readlines("#{db_Dump}").grep(/#{file.insert(-10, '_')}/).size > 0
      logger.info{"#{file}"}
      #mod_file =   file.insert(-10, '_')
      #logger.info{"#{file} -> #{mod_file}"}
    elsif File.readlines("#{db_Dump}").grep(/#{file.insert(-9, '_')}/).size > 0
      logger.info{"#{file}"}
      #mod_file =   file.insert(-9, '_')
      #logger.info{"#{file} -> #{mod_file}"}
    else
      logger.info{"NO_UNDERSCORE_PLACEMENT_FOUND -> #{file}"}
    end
  end
end

真正的问题:

irb(main):001:0> bob="ThisIsDefaultText"
=> "ThisIsDefaultText"
irb(main):002:0> puts bob.insert(-5,'_')
ThisIsDefault_Text
=> nil
irb(main):003:0> puts bob
ThisIsDefault_Text
=> nil
irb(main):004:0>

最佳答案

bob = "ThisIsDefaultText"
puts bob.dup.insert(-5, '_')
#=> ThisIsDefault_Text
puts bob
#=> ThisIsDefaultText

String 父对象有一个重复方法 .dup,它将“生成浅拷贝”。

关于ruby - 插入字符串并保留原​​始变量状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31708775/

相关文章:

regex - 正则表达式多词搜索

java - 实现一个算法来确定字符串是否包含所有唯一字符(大于 U+FFFF 的字符)

c++ - 在 C 中嵌入 Ruby 并扩展

ruby - ruby如何解析lambda或block中的 `self`关键字?

python - 正则表达式仅捕获 0 到 85

regex - SED 仅在变量、正则表达式使用之间替换空白

ruby - 在 ruby​​ 中 cat/grep 和 cut 到输出文件的最有效和最简单的方法是什么

ruby - 用于自动化 Windows 窗体应用程序和 Web 应用程序的 GUI 测试的免费工具

c - 字符串打印额外值 C 编程

php - 正则表达式查找以空格分隔的连续新行