Вы можете использовать регулярные выражения, я не знаю ruby, но код должен быть почти таким же, как мой пример:
Regex.Replace("this is an example @AlbertEin",
"(?<type>[@#])(?<nick>\\w{1,}[^ ])",
"<a href=\"http://twitter.com/${nick}\">${type}${nick}</a>");
Этот пример вернет
this is an example <a href="http://twitter.com/AlbertEin>@AlbertEin</a>
Если вы запускаете его в .NET
Регулярное выражение (?<type>[@#])(?<nick>\\w{1,}[^ ])
означает, запишите и назовите его TYPE - текст, начинающийся с @ или #, а затем запишите и назовите его NAME - текст, который следует за ним, содержит как минимум один текстовый символ, пока вы не найдете пробел. 1010 *