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/, '') # => ""