Ruby 的 gsub 是否不将 \n 视为空白字符?
Does Ruby's gsub not treat \n as a whitespace character?
我正在尝试执行一个简单的操作 - 将一些输入文本转换为 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 将换行符视为非空白字符?是否有任何其他表达式可以组合所有空格、制表符和换行符以便我可以将它们删除?
可能是编码问题。尝试 tag_json = tag.to_json.gsub(/[\s\p{]/, "")
您的表达式中不需要 +
,因为 gsub
会删除所有出现的单个字符。
考虑"aaaaaa".gsub(/a/, '') # => ""
我正在尝试执行一个简单的操作 - 将一些输入文本转换为 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 将换行符视为非空白字符?是否有任何其他表达式可以组合所有空格、制表符和换行符以便我可以将它们删除?
可能是编码问题。尝试 tag_json = tag.to_json.gsub(/[\s\p{]/, "")
您的表达式中不需要 +
,因为 gsub
会删除所有出现的单个字符。
考虑"aaaaaa".gsub(/a/, '') # => ""