在字符串检查中使用单引号

时间:2014-09-18 00:55:47

标签: ruby

我有以下程序:

args = ["a", "b"]
cmd_args = args.map{|x| x.inspect}
str =  cmd_args.join(' ')
puts str

输出结果为:

"a" "b"

我希望输出类似于以下内容(使用'引用的子字符串而不是"):

'a' 'b'

我不希望在字符串gsub之后执行inspect,因为在我的真实系统中,子字符串可能包含"。例如:

args = ['a"c', "b"]
cmd_args = args.map{|x| x.inspect.gsub('"', '\'')}
str =  cmd_args.join(' ')
puts str

将输出:

'a\'c' 'b'

a和c之间的"被错误地替换。我的预期输出是:

'a"c' 'b'

如何使用'代替"进行字符串检查以引用字符串?

2 个答案:

答案 0 :(得分:3)

s = 'a"c'.inspect
s[0] = s[-1] = "'"
puts s.gsub("\\\"", "\"") #=> 'a"c'

答案 1 :(得分:3)

您不能强制String#inspect使用单引号而不重写或覆盖它。

而不是x.inspect,您可以替换"'#{x}'",但是您必须确保转义'中显示的所有x个字符。

在这里工作:

args = ["a", "b"]
cmd_args = args.map{|x| "'#{x}'" }
str =  cmd_args.join(' ')
puts str

输出结果为:

'a' 'b'