如何删除{}和\"从使用ruby的结果数组中获取

时间:2016-09-24 11:00:36

标签: ruby regex

我有一个文本字符串如下:

my_string = 'The {"apples" >> "apple"} {"do" >> "does"} not fall far from {+"the "}tree{"?" >> "!"}'

我使用以下内容将大括号{}之间的所有内容提取到数组中:

my_content = my_string.scan(/\{.*?\}/)

结果是:

["{\"apples\" >> \"apple\"}",
 "{\"do\" >> \"does\"}",
 "{+\"the \"}",
 "{\"?\" >> \"!\"}"]

我想将内容作为:

["apples >> apple", "do >> does", "+the ", "? >> !"]

我是以非常棒的方式做到这一点的,如下所示:

my_content = eval my_content.to_s.gsub('\"','')
my_content = eval my_contents.to_s.gsub('{','')
my_content = eval my_content.to_s.gsub('}','')

如何删除我不想正确包含的元素?

2 个答案:

答案 0 :(得分:2)

▶ my_string.scan(/(?<={).*?(?=})/).map { |s| s.delete '"' } 
#⇒ ["apples >> apple", "do >> does", "+the ", "? >> !"]

在第一步中,我们使用positive lookaround,在第二步中删除双引号。

答案 1 :(得分:0)

您可以尝试:它将包含每个{}

/{(.[^}]*)}/g

^} - 确保它不接受'}'作为模式内的匹配,并确保它以大括号结束。

这样你就可以获得所有实例,否则你的正则表达式会听取所有结束}作为内部人员匹配并且只在最后停止}