2013-09-24 2 views
3

Как бы сделать это обычной строкой без косой черты?ruby ​​удалить обратную косую черту из строки

у меня есть:

"3e265629c7ff56a3a88505062dd526bd\"" 

Я хочу:

"3e265629c7ff56a3a88505062dd526bd" 
+1

ли Вы в виду не обратных косой черты и не двойных кавычек в строка? Поскольку обратная косая черта указывает, что следующая двойная кавычка является частью строки. Но ваш пример удаляет заключительную двойную кавычку из строки. – lurker

+2

Слэш - это '/', а обратная косая черта - \. Разница может показаться академической, но это важно, поскольку у них есть совершенно другое значение в Ruby. – tadman

ответ

8

Что у вас есть:

"3e265629c7ff56a3a88505062dd526bd\"" 

эквивалентно:

'3e265629c7ff56a3a88505062dd526bd"' 

Так, чтобы удалить, что:

string.tr!('"', '') 

Помните все специальные символы начинаются с обратной косой черты. Это включает в себя не только такие вещи, как newline \n или linefeed \r, но и котировочный знак " или обратная косая черта \\.

+1

Просто из любопытства, почему вы используете 'tr', а не' sub' или 'gsub'? – spickermann

+7

@spickermann Это потому, что 'tr' действительно быстро удаляет или переназначает символы. 'gsub' даст вам тот же результат, но он включает компиляцию и применение регулярного выражения и не может соответствовать простоте или скорости' tr'. Для одного вызова разница не имеет значения, но внутри циклов есть огромная прибыль от 'tr'. – tadman

+0

Спасибо, знал это. – spickermann

5

Как это?

s = "3e265629c7ff56a3a88505062dd526bd\"" 
s[/\w+/] 
# => "3e265629c7ff56a3a88505062dd526bd" 
+4

Не так много людей знают о 'String # []' с регулярным выражением, поэтому это интересно. – tadman

1
str = "3e265629c7ff56a3a88505062dd526bd\"" 
str.gsub(%r{\"}, '') 
=> "3e265629c7ff56a3a88505062dd526bd" 
2

Еще один способ "3e265629c­7ff56a3a88­505062dd52­6bd\"".del­ete ?"

+0

Это самый простой ответ, и я бы ответил. Интересно, почему более поздние ответы с более косвенными способами должны были подняться и были даже поддержаны. – sawa

+0

Это потому, что я прочитал этот вопрос немного поздно, чем другие: D – Raghu

3

Если вы хотите удалить все, кроме букв и цифр, которые вы можете использовать функцию «тр».

Например:

"3e265629c7ff56a3a88505062dd526bd\"".tr('^A-Za-z0-9','') 

Эта функция заменяет все, кроме букв и цифр с строка без символов. Here является ссылкой на функцию.

Надеюсь, это сработает для вас.

1

Ruby's String#[] - твой друг. Начиная с:

foo = "3e...bd\"" 

Это альтернативные способы получения значения без задней встроенной цитаты:

# delete it 
foo[-1] = '' 
foo['"'] = '' 
foo[/"$/] = '' 

Или:

# skip it 
foo[0..-2] 
Смежные вопросы