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
可以更好地控制标记化。