正则表达式十六进制例外

2024-10-01 13:40:46 发布

您现在位置:Python中文网/ 问答频道 /正文

以下字符串

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?你知道吗


Tags: 字符串textrehello列表heremore空白
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:46
>>> [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之间的十六进制数,前面是小写字母,或者|\x1f\x7f之间的十六进制数,后面是小写字母!然后您将得到以下结果:

['Hello', 'MORE\x11 TEXT', 'here']

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

相关问题 更多 >