使用RegEx从字符串中提取多个值

时间:2015-05-21 16:02:25

标签: ruby regex

我有字符串"{:name=>\"entry 1\", :description=>\"description 1\"}"

我使用正则表达式来获取名称和描述的值......

string = "{:name=>\"entry 1\", :description=>\"description 1\"}"

name = /\:name=>\"(.*?)\,/.match(string)
description = /\:description=>\"(.*?)\,/.match(string)

然而,这仅返回name #<MatchData ":name=>\"entry 1\"," 1:"entry 1\"">description返回nil

我理想的是name返回"entry 1"description返回"description 1"

我不知道我哪里出错......有什么想法吗?

2 个答案:

答案 0 :(得分:1)

问题是/\:description=>\"(.*?)\,/中的逗号应为/\:description=>\"(.*?)//\:description=>\"([^"]+)/

你也可以使用这种方法:

def extract_value_from_string(string, key)
  %r{#{key}=>\"([^"]+)}.match(string)[1]
end

extract_value_from_string(string, 'description')
=> "description 1"
extract_value_from_string(string, 'name')
=> "name 1"

答案 1 :(得分:0)

尝试使用此正则表达式一步检索namedescription

(?<=name=>\\"|description=>\\")[^\\]+

试试这个Demo

我知道这个演示正在使用PCRE,但我也在http://rubular.com/进行了测试,并且运行正常

如果你想单独获取它们,请使用此正则表达式来提取名称(?<=name=>\\")[^\\]+,并将其用于描述(?<=description=>\\")[^\\]+