python在特定字符后面的空白处拆分字符串

python在特定字符后面的空白处拆分字符串,python,regex,split,Python,Regex,Split,我关于Stackoverflow的第一个问题,因为我还没有找到答案 我正在尝试解决如何在Python中拆分字符串,它具有以下类型的格式: 'aaaa bbbb cccc:dd eeee:ff ggg hhhh iiii:jjjj kkkk:llll:mm nnn:ooo pppp qqqq:rrr' 进入以下列表项: “aaaa bbbb cccc:dd” ‘eeee:ff’ “ggg hhhh iiii:JJJJJ” 那好吧 nnn:ooo' 'pppp QQQ:rrr' 基本上,我需要在检

我关于Stackoverflow的第一个问题,因为我还没有找到答案

我正在尝试解决如何在Python中拆分字符串,它具有以下类型的格式:

'aaaa bbbb cccc:dd eeee:ff ggg hhhh iiii:jjjj kkkk:llll:mm nnn:ooo pppp qqqq:rrr'
进入以下列表项:

“aaaa bbbb cccc:dd” ‘eeee:ff’ “ggg hhhh iiii:JJJJJ” 那好吧 nnn:ooo' 'pppp QQQ:rrr' 基本上,我需要在检测到冒号“:”后的第一个空白处进行拆分

如果检测到冒号,我会考虑将字符串循环并拆分为下一个空格,但我怀疑可能会使用更有效的正则表达式


任何建议都将不胜感激:

不幸的是,您不能使用可变宽度look behind,因此正则表达式解决方案有点困难

使用发电机功能更容易:

def after_colon_split(string):
    start = 0
    iter = enumerate(string)
    for i, ch in iter:
        if ch == ':':
            for i, ch in iter:
                if ch == ' ':
                    yield string[start:i]
                    start = i + 1
                    break
    remainder = string[start:]
    if remainder:
         yield remainder
演示:


不幸的是,您不能使用可变宽度lookbehind,因此正则表达式解决方案有点困难

使用发电机功能更容易:

def after_colon_split(string):
    start = 0
    iter = enumerate(string)
    for i, ch in iter:
        if ch == ':':
            for i, ch in iter:
                if ch == ' ':
                    yield string[start:i]
                    start = i + 1
                    break
    remainder = string[start:]
    if remainder:
         yield remainder
演示:

这样怎么样:

#!/usr/bin/python

ls = list()
fin = list()
string = 'aaaa bbbb cccc:dd eeee:ff ggg hhhh iiii:jjjj kkkk:llll:mm nnn:ooo pppp qqqq:rrr'
for w in string.split():
    if ':' in w:
        ls.append(w)
        fin.append(' '.join(ls))
        ls = []
    else:
        ls.append(w)
for f in fin:
    print f
输出:

aaaa bbbb cccc:dd
eeee:ff
ggg hhhh iiii:jjjj
kkkk:llll:mm
nnn:ooo
pppp qqqq:rrr
这样怎么样:

#!/usr/bin/python

ls = list()
fin = list()
string = 'aaaa bbbb cccc:dd eeee:ff ggg hhhh iiii:jjjj kkkk:llll:mm nnn:ooo pppp qqqq:rrr'
for w in string.split():
    if ':' in w:
        ls.append(w)
        fin.append(' '.join(ls))
        ls = []
    else:
        ls.append(w)
for f in fin:
    print f
输出:

aaaa bbbb cccc:dd
eeee:ff
ggg hhhh iiii:jjjj
kkkk:llll:mm
nnn:ooo
pppp qqqq:rrr

我会匹配而不是分开。不确定这是否足够健壮…我只会匹配而不是拆分。不确定这是否足够强大…有趣的是非常相似re:谢谢你的帮助,也许我可以问另外一个问题,那就是如何将语句更改为在冒号前的空格上拆分:?我想我可能需要在拆分之前和之后都做。@logoverflow你的意思是:re.findallr'[^:][*.[^:][*:][^]*:[^]*+',我想在这种情况下,最好不要使用正则表达式以获得更好的性能测试非常类似re:谢谢你的帮助,也许我可以问另外一个问题,那就是如何将语句更改为在冒号前的空格上拆分:?我想我可能需要在拆分之前和之后都执行。@logoverflow您的意思是:re.findallr'[^:][*.[^:][*:][^]*:[^]*+',a我认为在这种情况下,最好不要使用正则表达式以获得更好的性能