以下字符串
str1 = "Hello\x00MORE\x11\x20TEXT\x05here"
应该将转换为此列表(删除除\ x20之外的所有十六进制字符串,该字符串应为空格):
list1 = ['Hello', 'MORE TEXT', 'here']
到目前为止,我的解决方案是:
new_list = re.split('\s+', re.sub('[\x01-\x1f\x7f]', ' ', s))
它产生:
list1 = ['Hello', 'MORE', 'TEXT', 'here']
但正如您所看到的,我需要MORE TEXT
为一个字符串,因此\x20
应转换为空格。我如何使用我的正则表达式而不考虑\x20
?
答案 0 :(得分:0)
>>> [re.sub(r'[\x00-\x1f\x7f ]+',' ',i) for i in re.split(r'(?<=[a-z])[\x00-\x1f\x7f]|[\x00-\x1f\x7f](?=[a-z])',str1)]
['Hello', 'MORE TEXT', 'here']
首先,您可以根据以下正则表达式拆分字符串:
r'(?<=[a-z])[\x00-\x1f\x7f]|[\x00-\x1f\x7f](?=[a-z])'
这种使用look-around的字符串将您的字符串拆分为\x00
和\x1f\x7f
之间的十六进制数字,前面是小写字母,或|
)\x00
之间的十六进制数字{{3}} 1}}和\x1f\x7f
后跟一个小写字母!那么你将得到以下结果:
['Hello', 'MORE\x11 TEXT', 'here']
现在你需要用空字符串替换十六进制数字,或者像我所做的那样你可以用空格替换任何十六进制数字的组合。