在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
中看到类似的功能。
答案 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']