python在特定字符后面的空格上拆分字符串

时间:2014-04-20 12:56:24

标签: 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:jjjj'
  • 'kkkk:llll:mm'
  • 'nnn:ooo'
  • 'pppp qqqq:rrr'

基本上我需要在检测到冒号(':')之后拆分第一个空格

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

任何建议都会非常感激:)

3 个答案:

答案 0 :(得分:4)

import re
a = 'aaaa bbbb cccc:dd eeee:ff ggg hhhh iiii:jjjj kkkk:llll:mm nnn:ooo pppp qqqq:rrr'
print(re.findall(r'([^:]*:[^ ]*) *', a))

答案 1 :(得分:1)

不幸的是你不能使用可变宽度的后视,所以正则表达式解决方案有点困难。

使用生成器功能更容易:

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

演示:

>>> inputstring = 'aaaa bbbb cccc:dd eeee:ff ggg hhhh iiii:jjjj kkkk:llll:mm nnn:ooo pppp qqqq:rrr'
>>> list(after_colon_split(inputstring))
['aaaa bbbb cccc:dd', 'eeee:ff', 'ggg hhhh iiii:jjjj', 'kkkk:llll:mm', 'nnn:ooo', 'pppp qqqq:rrr']

答案 2 :(得分:0)

这样怎么样:

#!/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