Ruby删除字符串后的逗号

时间:2017-05-13 16:03:54

标签: ruby

我有多个格式低于

的文件

EG。 file:sample.txt

id = class\234ha, class\poi23, class\opiuj, cap\7y6t5
dept = sub\6985de, ret\oiu87, class\234ha
cko = cyr\hui87

我正在寻找字符串并从多个文件中删除它。就像找到并删除字符串 - 类\ 234ha。

我的代码工作正常并删除了所有预期的字符串,但删除了预期或标记的字符串后,在行尾有一个尾随逗号。

EG。删除字符串后的sample.txt - 类\ 234ha

id = class\poi23, class\opiuj, cap\7y6t5
dept = sub\6985de, ret\oiu87,
cko = cyr\hui87

我想在 ret \ oiu87 之后删除最后一个逗号 。对于多个文件,.it应该相同。我不确定逗号后面是否有新行字符或空格。我怎样才能让它发挥作用。提前谢谢。

代码

 pool = ''
svn_files = Dir.glob("E:\work'*-access.txt")

value=File.open('E:\nando\list.txt').read
value.each_line do |line|
    line.chomp!
    print "VALUE: #{line}\n"
    svn_files.each do |file_name|
      text = File.read(file_name)
      replace = text.gsub( /#{Regexp.escape(line)}\,\s/, '').gsub( /#{Regexp.escape(line)}/, '' )

      unless text == replace

        text.each_line do |li|
          if li.match(/#{Regexp.escape(line)}/) then
           #puts "Its matching"
           pool = li.split(" ")[0] 
          end
        end 
        File.open('E:\Removed_users.txt', 'a') { |log| 
        log.puts "Removed from: #{file_name}"
        log.puts "Removed user : #{line}"
        log.puts "Removed from row :#{pool}"
        log.puts "*" * 50 
        }
        File.open(file_name, "w") { |file| file.puts replace }
      end
    end
end

1 个答案:

答案 0 :(得分:1)

复杂的正则表达式是邪恶的。除非您的应用程序域真正需要它们,否则不要使用它们相反,做多次通过。我不确定你的预期替换是什么,但从结构上来说这就是你想做的事情:

# Create an interim string using your existing substitutions. For example,
# the corpus you currently have after substitutions contains:
tmp_str = <<~'EOF'
  id = class\poi23, class\opiuj, cap\7y6t5
  dept = sub\6985de, ret\oiu87, 
  cko = cyr\hui87EOF
EOF

# Remove trailing commas.
final_str = tmp_str.gsub /,\s*$/m, ''

puts final_str

这会将以下输出发送到屏幕:

id = class\poi23, class\opiuj, cap\7y6t5
dept = sub\6985de, ret\oiu87
cko = cyr\hui87EOF

使用这种方法,如果您逐行工作或在多行字符串上工作并不重要。无论哪种方式,你只是在每一行的末尾剥去逗号和尾随空格。简单!