首页 > 解决方案 > 如何知道哪些分隔符分隔了拆分中的元素?

问题描述

在 Python 中,如何使用多个分隔符拆分字符串并知道使用哪个分隔符分隔任意两个元素?

例如,在以下示例中取自这篇文章

>>> a='Beautiful, is; better*than\nugly'
>>> import re
>>> re.split('; |, |\*|\n',a)
['Beautiful', 'is', 'better', 'than', 'ugly']

如何确定分隔“是”和“更好”的分隔符是“;'?

awk有一个有用的方法来完成此操作patsplit(string, array [, fieldpat [, seps ] ]),其中seps是一个数组,其中包含分隔两个元素的分隔符。在这种情况下,seps[1]将是',',seps[2]将是'; ',seps[3]将是 '*',并且seps[4]将是 '\n'。我没有看到类似的功能re.split

标签: pythonregexsplitdelimiterseparator

解决方案


您可以捕获正则表达式模式以获取输出中的分隔符:

In [16]: a = 'Beautiful, is; better*than\nugly'                                                                                                                                                             

In [17]: re.split(r'(; |, |\*|\n)', a)                                                                                                                                                                      
Out[17]: ['Beautiful', ', ', 'is', '; ', 'better', '*', 'than', '\n', 'ugly']

然后您可以使用通常的索引符号获得分隔符。

现在,如果您想要吐出的单词,请从索引 0 开始切片,步长为 2:

In [18]: re.split(r'(; |, |\*|\n)', a)[::2]                                                                                                                                                                 
Out[18]: ['Beautiful', 'is', 'better', 'than', 'ugly']

要获取分隔符,请从索引 1 开始切片,步长为 2:

In [19]: re.split(r'(; |, |\*|\n)', a)[1::2]                                                                                                                                                                
Out[19]: [', ', '; ', '*', '\n']

推荐阅读