【问题标题】:How to know what separator separated elements in a split? [duplicate]如何知道哪些分隔符分隔了拆分中的元素? [复制]
【发布时间】:2019-10-22 07:59:10
【问题描述】:

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

例如以下示例取自this post

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

如何确定分隔“is”和“better”的分隔符是 '; '?

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

【问题讨论】:

    标签: python regex split delimiter separator


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 2020-06-10
      • 2017-06-24
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多