ruby - 如何通过十六进制值从字符串中删除一系列字符
问题描述
我有一个字符串,我想删除特定十六进制范围内的所有字符,例如 0x9c-0xff。我想我可以使用 sub 使用单个字符来做到这一点。如何使用一系列十六进制字符执行此操作?
我可以使用单个值和 gsub 使其工作,但范围不起作用。
这是我从内存中提取的一些损坏的代码。我这台电脑上没有红宝石。
a = "foo" + ['9c'].pack('H*') + "bar" + ['FF'].pack('H*')
b = a.gsub([\x9c-\xff],'')
puts b
我希望看到字符串只是“foo”和“bar”,而没有我为测试删除添加的其他字符。
编辑:这个网站上的提问向导会问各种各样的问题,比如“输入你尝试过的东西”或“解释 xyz”,然后它把所有的东西拼凑成一个没有任何意义的巨大质量。有没有办法将向导报告为可怕的错误?
解决方案
我很肯定这是一个XY 问题,但如果需要,它可以通过将输入强制转换为 ASCII 并从 ASCII 字符生成正则表达式来完成。
a = "foo" + ['9c'].pack('H*') + "bar" + ['FF'].pack('H*')
a.
force_encoding(Encoding::ASCII_8BIT).
gsub(/[#{0x9C.chr}-#{0xFF.chr}]/, '')
#⇒ "foobar"
推荐阅读
- rx-swift - 带重放的 FlatMapLatest
- swift - 我的图像没有按正确的顺序加载
- javascript - 尝试从我的 JSON 文件访问一组图像到我的 JS 代码
- database - Oracle数据库表删除最佳实践
- vue.js - Vue 在与渲染功能一起使用时失去槽反应性
- python - Python:定义类对象,它是类中其他方法的列表
- mysql - 查询 MySQL 以搜索字符串,并将同一列替换为从 0 到字符串找到位置的子字符串
- crash - 尝试重新连接到笔记本时,Google Colab 冻结了我的浏览器和电脑
- html - 如何在复选框之间制作水平空间
- c - 来自 Glib 示例的 GTree