在Python中去掉字符第三次出现后的字符串
我想要去掉第三个字符之后的所有字符,比如说 - 例如。
我在网上找到了一段代码,它能实现这个功能,但我对它是怎么工作的有点困惑,所以想问一下,以便我能完全理解。
def indexList(s, item, i=0):
"""
Return an index list of all occurrances of 'item' in string/list 's'.
Optional start search position 'i'
"""
i_list = []
while True:
try:
i = s.index(item, i)
i_list.append(i)
i += 1
except:
break
return i_list
def strip_chrs(s, subs):
for i in range(indexList(s, subs)[-1], len(s)):
if s[i+1].isalpha():
return data[:i+1]
data = '115Z2113-3-777-55789ABC7777'
print strip_chrs(data, '-')
我有几个问题:在 while True: 这一行,什么是 true?还有在 except: 这里,除了什么?为什么要在这里写一个 break?
提前谢谢你!
4 个回答
4
这行代码
while True:
会产生一个无限循环。它会一直在这里循环,直到程序崩溃或者调用了 break
。而 except
这一行是用来处理异常的,当出现任何异常时,它会捕捉到这个异常,然后调用 break
,这样就能退出这个无限循环。
11
用一句话来表达:
data = '115Z2113-3-777-55789ABC7777'
strip_character = "-"
>>> strip_character.join(data.split(strip_character)[:3])
'115Z2113-3-777'
28
这里有一种方法:
def trunc_at(s, d, n=3):
"Returns s truncated at the n'th (3rd by default) occurrence of the delimiter, d."
return d.join(s.split(d, n)[:n])
print trunc_at("115Z2113-3-777-55789ABC7777", "-")
它是怎么工作的:
- 首先,把字符串
s
按照每次出现的分隔符d
切分成一个列表,使用s.split(d)
。我们可以在split
的第二个参数中指定最多切分的次数(因为切分到第n
次后就没必要再切了)。这样得到的结果是一个列表,比如["115Z2113", "3", "777", "55789ABC7777"]
。 - 接着,从这个列表中取出前
n
个项目,使用[:n]
。得到的结果是另一个列表,比如["115Z2113", "3", "777"]
。 - 最后,把这个列表再合并成一个字符串,在每个项目之间放上分隔符
d
,使用d.join(...)
,结果可能是"115Z2113-3-777"
。