удаление определенных экранированных символов в рубиновой строке с помощью gsub и regex

Я имею дело с некоторыми длинными строками в ruby, которые могут иметь странные экранированные символы. Например, одна строка, которая вызывает у меня проблемы, выглядит так:

s = "foobar \240 \241 \242 foobar\nfoobar"
puts s
foobar ? ? ? foobar
foobar

Я пытаюсь избавиться от странных символов \240, \241, \242 в приведенной выше строке. Может ли кто-нибудь сказать мне регулярное выражение для gsub, которое это делает? Примечание. Я хочу сохранить \n, просто хочу избавиться от всего, что имеет обратную косую черту, за которой следует число.

По сути, есть ли способ избавиться от всех подстрок формы "\[one or more digits]"

Эта причуда уже некоторое время раздражает меня. Я могу сделать это для заданного числа, но не могу найти регулярное выражение, которое делает общую замену любого числа после обратной косой черты.


person deruse    schedule 05.07.2011    source источник


Ответы (2)


Используйте это регулярное выражение: \\\d+. Соответствует \240, \241, \242.

Это означает Literal \, any digit one or more repetitions.

person Kirill Polishchuk    schedule 05.07.2011
comment
Кажется, не работает: я делаю это так: a.gsub(\\\d+,) =› foobar \240 \241 \242 foobar\nfoobar и пробовал a.gsub(/\\\d+/,) = › foobar \240 \241 \242 foobar\nfoobar - person deruse; 05.07.2011
comment
Также попробовал \240.gsub(Regexp.new(\\\d+),) => \240, который тоже не работает. - person deruse; 05.07.2011

Вы можете использовать класс Regexp, чтобы создать шаблон для определенного диапазона символов и заменить его.

s = "foobar \240 \241 \242 foobar\nfoobar"
min = 240
max = 242
pattern = Regexp.new "[\\#{min}-\\#{max}]"
puts s.gsub(pattern, '*')

выведет:

foobar * * * foobar
foobar
person ZombieDev    schedule 03.08.2011