首页 > 解决方案 > 如何通过十六进制值从字符串中删除一系列字符

问题描述

我有一个字符串,我想删除特定十六进制范围内的所有字符,例如 0x9c-0xff。我想我可以使用 sub 使用单个字符来做到这一点。如何使用一系列十六进制字符执行此操作?

我可以使用单个值和 gsub 使其工作,但范围不起作用。

这是我从内存中提取的一些损坏的代码。我这台电脑上没有红宝石。

a = "foo" + ['9c'].pack('H*') + "bar" + ['FF'].pack('H*')

b = a.gsub([\x9c-\xff],'')

puts b

我希望看到字符串只是“foo”和“bar”,而没有我为测试删除添加的其他字符。

编辑:这个网站上的提问向导会问各种各样的问题,比如“输入你尝试过的东西”或“解释 xyz”,然后它把所有的东西拼凑成一个没有任何意义的巨大质量。有没有办法将向导报告为可怕的错误?

标签: ruby

解决方案


我很肯定这是一个XY 问题,但如果需要,它可以通过将输入强制转换为 ASCII 并从 ASCII 字符生成正则表达式来完成。

a = "foo" + ['9c'].pack('H*') + "bar" + ['FF'].pack('H*')

a.
  force_encoding(Encoding::ASCII_8BIT).
  gsub(/[#{0x9C.chr}-#{0xFF.chr}]/, '')
#⇒ "foobar"

推荐阅读