这是 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"模块。
最佳答案
你可以使用
re.split(rb'(?!\A)(?=\\!)', rawByteString)
re.split(rb'(?!^)(?=\\!)', rawByteString)
查看 sample 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']
关于python - 拆分字符串并将分隔符保留为拆分字符串 block 的一部分,而不是单独的列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62591863/