3

这是在 Python 中的衍生产品,如何拆分字符串并保留分隔符?

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”模块的原因。

4

1 回答 1

1

您可以使用

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

请参阅示例正则表达式演示(字符串输入已更改,因为空字节不能是字符串的一部分)。

正则表达式详细信息

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

笔记

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

请参阅Python 演示

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']
于 2020-06-27T21:57:57.100 回答