Ruby, gsub и regex

Если необходимо создать файл, я думаю, что можно, вероятно, сделать что-то вроде этого:

using (FileStream outFile = System.IO.File.Create(filename))
{
    outFile.Seek(<length_to_write>-1, SeekOrigin.Begin);
    OutFile.WriteByte(0);
}

, Где length_to_write был бы размером в байтах файла для записи. Я не уверен, что у меня есть корректный синтаксис C# (не на компьютере для тестирования), но я сделал подобные вещи в C++ в прошлом, и это работало.

9
задан Simone Carletti 18 August 2009 в 12:54
поделиться

2 ответа

если ваши индексы всегда заканчиваются на границах слов, вы можете сопоставить это:

page_ids.each do |id|
  str = str.gsub(/##{id}\b/, link_to("##{id}", page_path(id))
end

вам нужно только добавить символ границы слова \ b в шаблон поиска, это не требуется для шаблона замены.

13
ответ дан 4 December 2019 в 06:41
поделиться

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

str = str.gsub(/#(\d*)/) { link_to("##{$1}", page_path($1)) }

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

PS: Если str не упоминается ниоткуда, вы можете использовать str.gsub! вместо str = str.gsub

22
ответ дан 4 December 2019 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: