код ruby ​​для изменения внешних кавычек на строках? - PullRequest
4 голосов
/ 13 декабря 2010

Кто-нибудь знает о геме Ruby (или встроенном, или собственном синтаксисе), который работает с внешними кавычками строк?

Я снова и снова пишу такие методы:

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 ]

4 голосов
/ 13 декабря 2010

Если вы делаете это много, вы можете добавить метод в строку:

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 перед добавлением двойных кавычек.

2 голосов
/ 13 декабря 2010

Это может объяснить, как удалить и добавить их:

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"
0 голосов
/ 28 декабря 2017

Я бы использовал 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"
...