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

有没有人知道在字符串的外部引号上运行的Ruby gem(或内置或本机语法)?

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

remove_outer_quotes_if_quoted( myString, chars ) -> aString add_outer_quotes_unless_quoted( myString, char ) -> aString 

第一个测试myString以查看其开头和结尾字符是否与字符中的任何一个字符匹配。 如果是这样,它将返回删除了引号的字符串。 否则它会保持不变。 chars默认为引号字符列表。

第二个测试myString以查看它是否已经开始并以char结尾。 如果是这样,它将返回不变的字符串。 如果没有,它返回前后加上char的字符串,并且使用反斜杠转义任何嵌入的char字符串。 char默认为默认字符列表中的第一个。

(当然,我的手工鹅卵石方法没有这么详细的名字。)

我在公共回购中寻找类似的方法,但找不到这样的东西。 我是唯一需要这么做的人吗? 如果没有,其他人如何做到这一点?

如果你做了很多,你可能想要一个方法添加到String:

 class String def strip_quotes gsub(/\A['"]+|['"]+\Z/, "") end end 

然后你可以调用string.strip_quotes

添加引号类似:

 class String def add_quotes %Q/"#{strip_quotes}"/ end end 

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

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

 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 

原来的两行:

 # >> "We're not in Kansas anymore." # >> 'He said, "Time flies like an arrow, Fruit flies like a banana."' 

剥离报价:

 # >> We're not in Kansas anymore. # >> He said, "Time flies like an arrow, Fruit flies like a banana." 

需要时添加引号:

 # >> "We're not in Kansas anymore." # >> 'He said, "Time flies like an arrow, Fruit flies like a banana."' # >> "foo" # >> "bar" 

value = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0]) ,我会使用value = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0]) 。简而言之,这个简单的代码检查字符串的第一个和最后一个字符是否相同,如果它们是单引号或双引号则删除它们。此外,可以添加所需数量的引号类型。

 %w["adadasd" 'asdasdasd' 'asdasdasd"].each do |value| puts 'Original value: ' + value value = value[1...-1] if value[0] == value[-1] && %w[' "].include?(value[0]) puts 'Processed value: ' + value end 

上面的示例将打印以下内容:

 Original value: "adadasd" Processed value: adadasd Original value: 'asdasdasd' Processed value: asdasdasd Original value: 'asdasdasd" Processed value: 'asdasdasd"