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

标签 python regex split python-re rawbytestring

这是 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/

相关文章:

python - 使用多处理模块结束守护进程

python - numpy.random.choice 中的替换是什么意思?

javascript - 在 iMacros 中使用 EVAL 和 REGEX 提取字符

c++ - QStringList::split - 将带有数据的长字符串拆分为多个不同的 QString

c - strtok() 如何在 C 中将字符串拆分为标记?

php - 需要一个复杂的正则表达式来拆分驼峰式大小写和数字

python - Django:./manage.py [...] 和 python manage.py [...] 之间有什么区别

python - Django 信号卡在循环中

用于 Laravel 验证的仅接受单词或字母的正则表达式组合

regex - 对特殊字符使用 sed