我有以下输入字符串:
string = "\"Newegg.com\" <Promo@email.newegg.com>"
我想用\"
代替\'
。我尝试过:
string.gsub(/\"/) {|i| "\\'" }
# => "\\'Newegg.com\\' <Promo@email.newegg.com>"
string.gsub(/\"/,%q(\\\'))
# => "\\'Newegg.com\\' <Promo@email.newegg.com>"
在两种方式中,它实际上都有两个\
实例,但是我只想要一个。反斜杠和转义b / c似乎是一个问题,否则可以正常工作:
string.gsub(/\"/,%q('))
# => "'Newegg.com' <Promo@email.newegg.com>"
-更新1-- 是的,看跌期权确实显示“正确”的值
temp = string.gsub(/\"/,%q(\\\'))
# => "\\'Newegg.com\\' <Promo@email.newegg.com>"
puts temp
# >> \'Newegg.com\' <Promo@email.newegg.com>
但是我想存储显示在最后一行的确切值。
答案 0 :(得分:1)
您的实际字符串不包含\
puts "\"Newegg.com\" <Promo@email.newegg.com>"
> "Newegg.com" <Promo@email.newegg.com>
这将按照您的期望将"
替换为'
:
puts "\"Newegg.com\" <Promo@email.newegg.com>".gsub('"', "'")
> 'Newegg.com' <Promo@email.newegg.com>
如果您确实想要\"
,请尝试另一个转义字符,例如:
puts "\\\"Newegg.com\\\" <Promo@email.newegg.com>"
> \"Newegg.com\" <Promo@email.newegg.com>
相同的替换应该起作用:
puts "\\\"Newegg.com\\\" <Promo@email.newegg.com>".gsub('"', "'")
> \'Newegg.com\' <Promo@email.newegg.com>
答案 1 :(得分:0)
看起来您对返回的结果有些困惑(可以理解的是)。
请记住,在irb中,最后一个结果使用.inspect
进行格式化,这意味着它将字符串用双引号引起来,然后转义需要在双引号中转义的字符(反斜杠和双引号)。串。这是为了区分字符串和其他值,例如数字,数组,哈希等。
但是,这仅仅是检查的结果。如果使用puts输出值,则将输出它而没有任何转义-这是您的值的更精确表示。puts显示的值是实际值,如果将值保存到变量中,将存储的内容
如果您仍然不知道字符串的样子,请尝试以下操作:
temp = string.gsub(/\"/,%q(\\\'))
temp.split('')
=> ["\\", "'", "N", "e", "w", "e", "g", "g", ".", "c", "o", "m", "\\", "'", " ", "<", "P", "r", "o", "m", "o", "@", "e", "m", "a", "i", "l", ".", "n", "e", "w", "e", "g", "g", ".", "c", "o", "m", ">"]
这会将您的字符串分解为单个字符的数组,并使您更容易准确地看到字符串中的内容。请注意,您有一个\
字符(显示为"\\"
,但是由于确保每个字符串的长度正好是一个字符,因此您知道由于检查而以这种方式显示了它)和一个{{1} }开头的字符。