用正则表达式提取单词

时间:2015-02-06 20:28:02

标签: ruby regex

我想将$word替换为以下字符串中的其他字词:

"Hello $word How are you"

我使用了/\$(.*)//\$(.*)(\s)//\$(.* \s)/。由于*,我在$之后得到整个字符串,但我只需要那个字;我需要逃离这个空间。我尝试了/s,\b,还有其他几个选项,但我无法理解。任何帮助,将不胜感激。

4 个答案:

答案 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是带有命名捕获组的正则表达式。