概述
I'm just wondering, I'm trying to make a very simple text processing or reduction. I want to replace all spaces (without these in " ") by one. I also have some semantic action dependent on each character read, so I that's why I don't want to use any regex. It's some kind of pseudo FSM model.
So here's the the deal:
s = '''that's my string, " keep these spaces " but reduce these '''
Desired ouput:
that's my string, " keep these spaces " but reduce these
What I would like to do is something like this: (I don't mention the '"' case to keep the example simple)
out = ""
for i in range(len(s)):
if s[i].isspace():
out += ' '
while s[i].isspace():
i += 1
else:
out += s[i]
I don't quite understand how the scopes are created or shared in this case.
Thank you for advice.
解决方案
I also have some semantic action dependent on each character read ... It's some kind of pseudo FSM model.
You could actually implement an FSM:
s = '''that's my string, " keep these spaces " but reduce these '''
normal, quoted, eating = 0,1,2
state = eating
result = ''
for ch in s:
if (state, ch) == (eating, ' '):
continue
elif (state,ch) == (eating, '"'):
result += ch
state = quoted
elif state == eating:
result += ch
state = normal
elif (state, ch) == (quoted, '"'):
result += ch
state = normal
elif state == quoted:
result += ch
elif (state,ch) == (normal, '"'):
result += ch
state = quoted
elif (state,ch) == (normal, ' '):
result += ch
state = eating
else: # state == normal
result += ch
print result
Or, the data-driven version:
actions = {
'normal' : {
' ' : lambda x: ('eating', ' '),
'"' : lambda x: ('quoted', '"'),
None: lambda x: ('normal', x)
},
'eating' : {
' ' : lambda x: ('eating', ''),
'"' : lambda x: ('quoted', '"'),
None: lambda x: ('normal', x)
},
'quoted' : {
'"' : lambda x: ('normal', '"'),
'\': lambda x: ('escaped', '\'),
None: lambda x: ('quoted', x)
},
'escaped' : {
None: lambda x: ('quoted', x)
}
}
def reduce(s):
result = ''
state = 'eating'
for ch in s:
state, ch = actions[state].get(ch, actions[state][None])(ch)
result += ch
return result
s = '''that's my string, " keep these spaces " but reduce these '''
print reduce(s)
最后
以上就是震动手套为你收集整理的python for循环字符串,Python在嵌套的for循环中遍历字符串的全部内容,希望文章能够帮你解决python for循环字符串,Python在嵌套的for循环中遍历字符串所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复