Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何使用正则表达式删除python字符串中的十六进制值?

我在matlab中有一个单元格数组

columns = {'MagX', 'MagY', 'MagZ', ... 'AccelerationX', 'AccelerationX', 'AccelerationX', ... 'AngularRateX', 'AngularRateX', 'AngularRateX', ... 'Temperature'} 我使用这些脚本这些脚本利用matlab的hdf5write函数将数组保存为hdf5格式。

然后,我使用pytables将hdf5文件读入python。单元格数组以字符串的numpy数组形式出现。我将转换为列表,这是输出:

>>>columns ['MagX\x00\x00\x00\x08\x01\x008\xe6\x7f', 'MagY\x00\x7f\x00\x00\x00\xee\x0b9\xe6\x7f', 'MagZ\x00\x00\x00\x00\x001', 'AccelerationX', 'AccelerationY', 'AccelerationZ', 'AngularRateX', 'AngularRateY', 'AngularRateZ', 'Temperature'] 这些十六进制值从某处弹出到字符串中,我想将其删除。它们并不总是出现在列表的前三项中,我需要一种很好的方式来处理它们,或者找出它们为什么排在第一位。

>>>print columns[0] Mag8锟?>>>columns[0] 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f' >>>repr(columns[0]) "'MagX\\x00\\x00\\x00\\x08\\x01\\x008\\xe6\\x7f'" >>>print repr(columns[0]) 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f' 我尝试使用正则表达式删除十六进制值,但运气不佳。

>>>re.sub('(\w*)\\\\x.*', '\1', columns[0]) 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f' >>>re.sub('(\w*)\\\\x.*', r'\1', columns[0]) 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f' >>>re.sub(r'(\w*)\\x.*', '\1', columns[0]) 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f' >>>re.sub('([A-Za-z]*)\x00', r'\1', columns[0]) 'MagX\x08\x018\xe6\x7f' >>>re.sub('(\w*?)', '\1', columns[0]) '\x01M\x01a\x01g\x01X\x01\x00\x01\x00\x01\x00\x01\x08\x01\x01\x01\x00\x018\x01\xe6\x01\x7f\x01' 有关如何处理此问题的任何建议?



回答:

您可以通过以下方式删除所有非单词字符:

>>> re.sub(r'[^\w]', '', 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f') 'MagX8' 正则表达式[^\w]将匹配不是字母,数字或下划线的任何字符。通过在re.sub为该正则表达式提供一个空字符串作为替换,您将删除该字符串中的所有其他字符。

由于可能要保留其他字符,因此更好的解决方案可能是指定要保留的更大范围的字符,但不包括控制字符。例如:

>>> re.sub(r'[^\x20-\x7e]', '', 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f') 'MagX8' 或者,您可以将[^\x20-\x7e]替换为等效的[^ -~] [^\x20-\x7e] [^ -~] ,这取决于您似乎更清楚。

要排除第一个控制字符之后的所有字符,只需添加.* ,如下所示:

>>> re.sub(r'[^ -~].*', '', 'MagX\x00\x00\x00\x08\x01\x008\xe6\x7f') 'MagX'

更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:16


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.