2015-02-06 2 views
0

Я хочу заменить $word с другим словом в следующей строке:Распаковка слово с регулярным выражением

"Hello $word How are you" 

Я использовал /\$(.*)/, /\$(.*)(\s)/, /\$(.* \s)/. Из-за *, я получаю всю строку после $, но мне нужно только это слово; Мне нужно избежать пространства. Я попробовал /s,\b и несколько других вариантов, но я не могу понять это. Любая помощь будет оценена по достоинству.

ответ

4

* Оператор greedy означает, что он будет соответствовать столько, сколько он может и по-прежнему позволяет совместить остаток регулярного выражения. Токен .* будет с жадностью соответствовать каждому символу в строке. Затем двигатель регулярного выражения перейдет к следующему токену \s, который соответствует последнему пробелу перед словом «вы» в строке, давшей вам результат word How are.

Вы можете использовать \S вместо .*, который соответствует любым символам без пробелов.

\$\S+ 

Или просто совпадают только символы слов, вы можете использовать следующее:

\$\w+ 
+0

Большое спасибо. – Kunj

+0

'' Очень хорошее объяснение ".sub (/ \ $ \ w + /," nice ")', но я не уверен, что OP нужна группа захвата. –

+0

@CarySwoveland '^^^' Да, я его отредактировал. – hwnd

1

Если вы хотите заменить только «$ мир» с помощью регулярных выражений, попробуйте это:

"Hello $word How are you".gsub(/\$word/, 'other_word') 

Или:

"Hello $word How are you".sub('$word',"*") 

Вы можете прочитать больше для GSUB здесь: http://www.ruby-doc.org/core-2.2.0/String.html#method-i-gsub

0

Подставив шаблонные слова для других слов, как правило, не делается с регулярным выражением, но с помощью метода % и хэш:

h = {word: "aaa", other_word: "bbb"} 
p "Hello %{word} How are you. %{other_word}. Bye %{word}" % h 
# => "Hello aaa How are you. bbb. Bye aaa" 
0

Рассматривайте:

>> string = "Hello $word How are you" 
=> "Hello $word How are you" 
>> replace_regex = /(?<replace_word>\$\w+)/ 
=> /(?<replace_word>\$\w+)/ 
>> string.gsub(replace_regex, "Bob") 
=> "Hello Bob How are you" 
>> string.match(replace_regex)[:replace_word] 
=> "$word" 

Примечание:

  • replace_word является регулярным выражением с названная группа захвата.
Смежные вопросы