re.split - 保留匹配的字符串?

时间:2014-08-28 04:45:50

标签: python regex

如果这简单或重复,请告诉我。我已经无法在这里找到答案。

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

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

例如:

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

如果我想打破这个字符串来命名条目,我会使用re.split("(Name :))#34;,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')

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:4)

我们可以使用前瞻\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']

答案 1 :(得分:0)

   \s+(?=Name)

按此分割。实际上它表示用空格分隔后跟名称。