拆分字符串并将分隔符保留为拆分字符串块的一部分,而不是单独的列表元素
Split a string and keep the delimiters as part of the split string chunks, not as separate list elements
这是 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']
这是 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']