正则表达式十六进制有例外

时间:2015-02-19 19:56:52

标签: python regex

以下字符串

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

1 个答案:

答案 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']

现在你需要用空字符串替换十六进制数字,或者像我所做的那样你可以用空格替换任何十六进制数字的组合。