我有一个文本字符串如下:
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('}','')
如何删除我不想正确包含的元素?
答案 0 :(得分:2)
▶ my_string.scan(/(?<={).*?(?=})/).map { |s| s.delete '"' }
#⇒ ["apples >> apple", "do >> does", "+the ", "? >> !"]
在第一步中,我们使用positive lookaround,在第二步中删除双引号。
答案 1 :(得分:0)
您可以尝试:它将包含每个{}
/{(.[^}]*)}/g
^} - 确保它不接受'}'作为模式内的匹配,并确保它以大括号结束。
这样你就可以获得所有实例,否则你的正则表达式会听取所有结束}作为内部人员匹配并且只在最后停止}