拆分字符串并将分隔符保留为拆分字符串块的一部分,而不是单独的列表元素

2024-09-27 17:44:56 发布

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

这是In Python, how do I split a string and keep the separators?的衍生产品

rawByteString = b'\\!\x00\x00\x00\x00\x00\x00\\!\x00\x00\x00\x00\x00\x00'

如何使用“\\!”作为分隔符将此rawByteString拆分为多个部分,而不删除分隔符,以便获得:

[b'\\!\x00\x00\x00\x00\x00\x00', b'\\!\x00\x00\x00\x00\x00\x00']

我不想使用[b'\\!' + x for x in rawByteString.split(b'\\!')][1:],因为这将使用string.split()并且只是一种变通方法,这就是为什么这个问题被标记为“re”模块的原因


Tags: andtheinforstring产品dohow
1条回答
网友
1楼 · 发布于 2024-09-27 17:44:56

你可以用

re.split(rb'(?!\A)(?=\\!)', rawByteString)
re.split(rb'(?!^)(?=\\!)', rawByteString)

请参阅asample regex demo(字符串输入已更改,因为空字节不能是字符串的一部分)

正则表达式详细信息

  • (?!^)/(?!\A)/(?<!^)-字符串开头以外的位置
  • (?=\\!)-没有紧跟反斜杠+!的位置

注释

  • 由于使用字节字符串,因此在定义模式字符串文字时需要b前缀
  • r使字符串文字成为原始字符串文字,这样我们就不必重复转义反斜杠,并且可以使用\\来匹配字符串中的单个\

Python demo

import re
rawByteString = b'\\!\x00\x00\x00\x00\x00\x00\\!\x00\x00\x00\x00\x00\x00'
print ( re.split(rb'(?!\A)(?=\\!)', rawByteString) )

输出:

[b'\\!\x00\x00\x00\x00\x00\x00', b'\\!\x00\x00\x00\x00\x00\x00']

相关问题 更多 >

    热门问题