2012-04-01 2 views
4

Заранее спасибо ...Regex/Удалить слэш из строки в рубин

У меня возникли некоторые проблемы с регулярными выражениями в рубин, или иным образом найти способ, чтобы удалить косую черту из строки. Вот как выглядит моя строка:

string = "word \/ word" 

Я пытаюсь удалить и обратную косую черту, и косую черту; Я хочу этот результат:

string = "word word" 

Я думаю, что у меня что-то пропало без сопровождения или кто знает что!

Я попытался это:

string.gsub(/\//, "") 

, который будет удалить обратный слеш, но оставляет слэш. Я пробовал вариации с экранирующими символами на всем протяжении и в местах, которые даже не имеют смысла!

Я ужасен с регулярным выражением и очень расстраиваюсь, работая со струнами в целом, и я просто в недоумении. Я уверен, что это что-то очевидное, но чего мне не хватает?

+0

'string.gsub (/ \/| \\ /,«»)' удалит обе косые черты, но, как Никлас B указывает, вы лучше, используя строку замены , – Alan

+0

на самом деле есть только одна косая черта в строке, потому что первая из них является ненужной escape-косой чертой – pguardiario

+0

Не настоящий ответ, но вы можете использовать альтернативный синтаксис regex, например, 'string.gsub (% r! \\/!, '') 'чтобы облегчить боль", сколько раз я избегаю этого? " вопрос. – x1a4

ответ

4

Причина в том, что и /, и \ являются недопустимыми символами в регулярном выражении самостоятельно. Поэтому их нужно избегать, поставив перед ними \. So \ становится \\ и / Ставка ¥ \/. Собираем их вместе в другой набор слешами сделать Regexp буквальное, мы получим:

string.gsub(/\\\//, "") 

Другой способ написать это:

string.gsub(/#{Regexp.escape('\/')}/, "") 

Вы должны проверить Rubular на хороший способ развить Regexp строки.

http://rubular.com/r/ml1a9Egv4B

+0

Однако я предпочитаю решение Niklas B. ниже, так как оно даже не используйте Regexp. – nertzy

+0

Вы можете написать регулярное выражение без интерполяции: 'string.gsub (Regexp.escape (" \/"), '')'. – steenslag

+0

На самом деле это не делает то же самое, @steenslag. Во-первых, я хочу указать, что у меня была ошибка в моем ответе (который я редактировал). Строка '' \/''должна быть в одинарных кавычках, чтобы Ruby не отменял ее на'/'. Затем 'Regexp.escape' возвращает строку, поэтому ваш пример просто делает это:' string.gsub ('/', '') ', который не тот, который вы намеревались.Вместо этого вы должны либо напрямую поставить строку, либо использовать 'Regexp.escape', интерполированный внутри реального Regexp. Надеюсь, все это имело смысл! – nertzy

0

Это на самом деле то, что вы хотите, но не по тем причинам, по вашему мнению:

string = "word \/ word" 
# => "word/word" 
string.gsub(/\//, "") 
# => "word word" 

Примечание: вам нужно GSUB! если вы хотите, чтобы заменить содержимое строки

2
str = "word \/ word" 
p str.delete('\/') #=>"word word" 
# to get rid of the double spaces: 
p str.delete('\/').squeeze(' ') #=>"word word" 
+0

Это гораздо более элегантный способ сделать это. – zachaysan

Смежные вопросы