用于修改字符串外引号的 ruby​​ 代码?

Blu*_*lue 5 ruby string quote

有谁知道对字符串的外引号进行操作的 Ruby gem(或内置或本机语法,就此而言)?

我发现自己一遍又一遍地编写这样的方法:

remove_outer_quotes_if_quoted( myString, chars ) -> aString
add_outer_quotes_unless_quoted( myString, char ) -> aString
Run Code Online (Sandbox Code Playgroud)

第一个测试myString它的开始和结束字符是否与chars. 如果是,则返回去掉引号的字符串。否则它返回它不变。chars默认为引号字符列表。

第二个测试myString以查看它是否已经开始和结束char。如果是,则返回未更改的字符串。如果不是,它返回char前后附加的字符串,并且任何嵌入的出现char都用反斜杠转义。char默认为默认字符列表中的第一个。

(当然,我手工拼凑的方法没有如此冗长的名称。)

我在公共存储库中四处寻找类似的方法,但找不到类似的方法。我是唯一一个需要做很多事情的人吗?如果没有,其他人是如何做到这一点的?

Mar*_*mas 5

如果你经常这样做,你可能想给 String 添加一个方法:

class String
  def strip_quotes
    gsub(/\A['"]+|['"]+\Z/, "")
  end
end
Run Code Online (Sandbox Code Playgroud)

然后你就可以打电话了string.strip_quotes

添加引号是类似的:

class String
  def add_quotes
     %Q/"#{strip_quotes}"/ 
  end
end
Run Code Online (Sandbox Code Playgroud)

这称为 asstring.add_quotes并在添加双引号之前使用 strip_quotes。


the*_*Man 3

这可能会解释如何删除和添加它们:

str1 = %["We're not in Kansas anymore."]
str2 = %['He said, "Time flies like an arrow, Fruit flies like a banana."']

puts str1
puts str2

puts

puts str1.sub(/\A['"]/, '').sub(/['"]\z/, '')
puts str2.sub(/\A['"]/, '').sub(/['"]\z/, '')

puts 

str3 = "foo"
str4 = 'bar'

[str1, str2, str3, str4].each do |str|
  puts (str[/\A['"]/] && str[/['"]\z/]) ? str : %Q{"#{str}"}
end
Run Code Online (Sandbox Code Playgroud)

原来的两行:

# >> "We're not in Kansas anymore."
# >> 'He said, "Time flies like an arrow, Fruit flies like a banana."'
Run Code Online (Sandbox Code Playgroud)

剥离报价:

# >> We're not in Kansas anymore.
# >> He said, "Time flies like an arrow, Fruit flies like a banana."
Run Code Online (Sandbox Code Playgroud)

需要时添加引号:

# >> "We're not in Kansas anymore."
# >> 'He said, "Time flies like an arrow, Fruit flies like a banana."'
# >> "foo"
# >> "bar"
Run Code Online (Sandbox Code Playgroud)