gpt4 book ai didi

python - 如何使用正则表达式删除 python 字符串中的十六进制值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:13 25 4
gpt4 key购买 nike

我在matlab中有一个元胞数组

columns = {'MagX', 'MagY', 'MagZ', ...
'AccelerationX', 'AccelerationX', 'AccelerationX', ...
'AngularRateX', 'AngularRateX', 'AngularRateX', ...
'Temperature'}

我使用 these scripts它利用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] 替换为等效的 [^ -~],具体取决于您觉得哪个更清楚。

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

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

关于python - 如何使用正则表达式删除 python 字符串中的十六进制值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com