我想将$word
替换为以下字符串中的其他字词:
"Hello $word How are you"
我使用了/\$(.*)/
,/\$(.*)(\s)/
,/\$(.* \s)/
。由于*
,我在$
之后得到整个字符串,但我只需要那个字;我需要逃离这个空间。我尝试了/s,\b
,还有其他几个选项,但我无法理解。任何帮助,将不胜感激。
答案 0 :(得分:4)
*
是greedy运算符,意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。令牌.*
将贪婪地匹配字符串中的每个字符。然后,正则表达式引擎将前进到下一个标记\s
,该标记与字符串中单词“you”之前的最后一个空格匹配,结果为word How are
。
您可以使用\S
代替与任何非空白字符匹配的.*
。
\$\S+
或者只是简单地匹配单词字符,您可以使用以下内容:
\$\w+
答案 1 :(得分:1)
如果您只想更换" $ world"使用正则表达式,试试这个:
"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
答案 2 :(得分: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"
答案 3 :(得分: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
是带有命名捕获组的正则表达式。