Ruby的gsub不会将\ n视为空格字符吗?

时间:2017-07-18 16:49:05

标签: json ruby gsub

我试图执行一个简单的操作 - 将一些输入文本转换为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将换行符视为非空格?是否有任何其他表达式将所有空格,制表符和换行符组合在一起,以便我可以将它们删除?

1 个答案:

答案 0 :(得分:1)

也许这是一个编码问题。试试tag_json = tag.to_json.gsub(/[\s\p{]/, "")

您的表达式中不需要+,因为gsub无论如何都会删除所有出现的单个字符。

考虑"aaaaaa".gsub(/a/, '') # => ""