【问题标题】:re.split - Leave matched string in place?re.split - 保留匹配的字符串?
【发布时间】:2014-08-28 04:45:49
【问题描述】:

如果这是非常简单或重复的,请告诉我。我已经在这里找不到答案了。

Python 的 re.split 将破解一个字符串并返回一个由其发送的参数拆分的字符串列表。如果搜索字符串在括号中,它将保留匹配的字符串,但会将匹配的字符串放在单独的列表元素中。

有没有办法让 re.split 简单地保留匹配的字符串?

例如:

swars = """Name:  Chewie  Race:  Wookie    Name:  Han Solo  Race: Human
Name:  Jabba the Hutt  Race: Hutt"""

如果我想将此字符串分解为名称条目,我会使用 re.split("(Name:)", swars) 但结果是一个看起来像这样的列表:

('Name:', 'Chewie  Race:  Wookie', 'Name:', 'Han Solo  Race: Human', 'Name:', 'Jabba the Hutt  Race: Hutt')

当我想要的是:

('Name: Chewie  Race:  Wookie', 'Name: Han Solo  Race: Human', 'Name: Jabba the Hutt  Race: Hutt')

有没有办法做到这一点?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    我们可以使用正则表达式和前瞻\s*(?=Name) 来拆分字符串并保留“名称”:

    import re
    
    swars = """Name:  Chewie  Race:  Wookie    Name:  Han Solo  Race: Human
    Name:  Jabba the Hutt  Race: Hutt"""
    
    print re.split('\s*(?=Name)', swars) 
    # prints: ['Name:  Chewie  Race:  Wookie', 'Name:  Han Solo  Race: Human', 'Name:  Jabba the Hutt  Race: Hutt']
    

    【讨论】:

      【解决方案2】:
         \s+(?=Name)
      

      按此分割。本质上,它表示按空格后跟名称分割。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-10
        • 1970-01-01
        • 2018-04-23
        • 1970-01-01
        相关资源
        最近更新 更多