我试图执行一个简单的操作 - 将一些输入文本转换为JSON,处理它,并进一步使用它。
require 'json'
aws_region = "us-east-1"
tag = `sudo aws ec2 describe-tags --region="#{aws_region}" --
filters "Name=resource-type,Values=instance" "Name=key,Values=Group"
"Name=resource-id,Values=$(ec2metadata --instance-id)"`
puts tag
tag_json = tag.to_json.gsub(/\s+/, "")
#tag_json = tag.gsub("\n", "")
puts tag_json
obj = JSON.parse(tag_json)
desired_value = obj["Tags"][0]["Value"]
puts desired_value
我预计上面会删除包括换行符在内的所有空格,但令我惊讶的是,输出仍然有新行。 JSON.parse因以下错误而失败,因为换行符仍然存在。如果上面的附加tag_json分配取消注释,它将删除换行并成功。
JSON::ParserError
-----------------
746: unexpected token at '"{\n\"Tags\": [\n{\n\"ResourceType\":
\"instance\", \n\"ResourceId\": \"i-XXXXXX\", \n\"Value\":
\"groupA\", \n\"Key\": \"Group\"\n}\n]\n}\n"'
我最终必须为换行设置一个单独的案例。为什么gsub将换行符视为非空格?是否有任何其他表达式将所有空格,制表符和换行符组合在一起,以便我可以将它们删除?
答案 0 :(得分:1)
也许这是一个编码问题。试试tag_json = tag.to_json.gsub(/[\s\p{]/, "")
您的表达式中不需要+
,因为gsub
无论如何都会删除所有出现的单个字符。
考虑"aaaaaa".gsub(/a/, '') # => ""