我有字符串"{: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"
我不知道我哪里出错......有什么想法吗?
答案 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)
尝试使用此正则表达式一步检索name
和description
(?<=name=>\\"|description=>\\")[^\\]+
试试这个Demo
我知道这个演示正在使用PCRE
,但我也在http://rubular.com/
进行了测试,并且运行正常
如果你想单独获取它们,请使用此正则表达式来提取名称(?<=name=>\\")[^\\]+
,并将其用于描述(?<=description=>\\")[^\\]+