如何在不同的分隔符上拆分字符串,但在输出中保留一些所述分隔符? (标记字符串)

How do I split a string on different delimiters, but keeping on the output some of said delimiters? (Tokenize a string)

更具体地说,我想在任何非字母数字字符上拆分一个字符串,但在分隔符不是白色的情况下 space 我想保留它。即输入:

my_string = 'Hey, I\'m 9/11 7-11'

我想得到:

['Hey' , ',' , 'I' , "'" , 'm', '9' , '/' , '11', '7' , '-' , '11']

没有白色space作为列表元素。

我试过以下方法:

re.split('([/\'\-_,.;])|\s', my_string)

但输出:

['Hey', ',', '', None, 'I', "'", 'm', None, '9', '/', '11', None, '7', '-', '11']

如何在没有 'unnecessary' 迭代的情况下解决这个问题?

我在转义反斜杠字符时也遇到了一些麻烦,因为 '\\' 似乎不起作用,关于如何解决这个问题有什么想法吗?

非常感谢。

您可以使用

import re
my_string = "Hey, I'm 9/11 7-11"
print(re.findall(r'\w+|[^\w\s]', my_string))
# => ['Hey', ',', 'I', "'", 'm', '9', '/', '11', '7', '-', '11']

Python demo

\w+|[^\w\s] 正则表达式匹配 1 个以上的单词字符(字母、数字、_ 符号)或单词和空格字符以外的单个字符。

顺便说一句,要将反斜杠与正则表达式匹配,您需要在原始字符串文字 (r'\') 中使用 \ 或在常规字符串中使用 4 个反斜杠 ('\\') .建议使用原始字符串文字在 Python.

中定义正则表达式模式