如何知道在分隔符中分隔符是什么分隔符?

时间:2019-06-06 19:08:08

标签: python regex split delimiter separator

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

例如在以下摘自this post的示例中:

>>> 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中看到类似的功能。

1 个答案:

答案 0 :(得分:4)

您可以捕获Regex模式以在输出中获取分隔符:

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

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

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

现在,如果您想要随地吐痰的单词,请以2的步长从索引0切片:

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

要获取分隔符,请以2的步长从索引1进行切片:

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