如何在不同的分隔符上拆分字符串,但保留输出的一些分隔符? (Tokenize一个字符串)

时间:2017-04-25 20:54:36

标签: python regex string split tokenize

更具体地说,我想在任何非字母数字字符上拆分字符串,但是如果分隔符不是我要保留的空格。也就是说,输入:

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

我想得到:

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

没有空格作为列表元素。

我尝试了以下内容:

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

但是输出:

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

如果没有“不必要的”迭代,我该如何解决这个问题?

另外我在逃避反斜杠字符方面遇到了一些麻烦,因为'\\\\'似乎没有用,有关如何解决此问题的任何想法?

非常感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用

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中定义正则表达式模式。