Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不同的分隔符上拆分字符串,但在输出中保留所述的一些分隔符?(标记字符串)_Python_Regex_String_Split_Tokenize - Fatal编程技术网

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

Python 如何在不同的分隔符上拆分字符串,但在输出中保留所述的一些分隔符?(标记字符串),python,regex,string,split,tokenize,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', ',', '', N

更具体地说,我希望在任何非字母数字字符上拆分字符串,但如果分隔符不是空白,我希望保留它。也就是说,对于输入:

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']
我如何在没有“不必要的”迭代的情况下解决这个问题

另外,我在转义反斜杠字符时遇到了一些问题,因为
'\\\\'
似乎不起作用,有没有办法解决这个问题

非常感谢

您可以使用

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']

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


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

因为我想拆分字符串,而不是查找元素。findall是“正确”的方法吗?我发现一些关于这个主题的讨论,关于你似乎想要标记字符串,对吗?分为“单词”(单词符号组)和非单词符号(分别)?否则,使用(与
filter
一起删除空值)。当使用包含捕获组的正则表达式进行拆分时,您必然会得到空元素,这通常是由于字符串输入造成的。是的,完全正确。您提供的代码工作得很好(谢谢!)。我只是问,因为我看到有人说这不是“正确”的方法。好吧,看:我们匹配
\w+
(所有单词字符条纹)或相反,
\w
(=
[^\w]
,非单词字符),全局,所有出现(由于
re.findall
),但除了空格(将
\s
添加到否定字符类-
[^\w\s]
)。这样我们就不会错过任何东西。我们忽略的只是空白。另外,
re.findall
可以更好地控制标记化。