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

时间:2010-12-12 22:13:23

标签: ruby string quote

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

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

如果你做了很多,你可能想要一个方法添加到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。

答案 1 :(得分:2)

这可能是“如何删除和添加它们:

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"

答案 2 :(得分: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"