我在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'
基本上我需要在检测到冒号(':')之后拆分第一个空格
如果检测到冒号但是我怀疑可能会使用更高效的正则表达式,我正在考虑循环字符串并在下一个空格上拆分。
任何建议都会非常感激:)
答案 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