我想在第三个字符之后删除所有字符,比如说 - 例如。
我在网上找到了这个代码并且它有效,但是我无法了解它是如何工作的,并且想要问我所以我可以完全理解它。
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, '-')
这是我的问题 在真的时候:行什么是真的? 另外除了:除了什么?为什么在那里编码?
提前致谢!
答案 0 :(得分:24)
这是一种方式:
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"
答案 1 :(得分:8)
以单行方式:
data = '115Z2113-3-777-55789ABC7777'
strip_character = "-"
>>> strip_character.join(data.split(strip_character)[:3])
'115Z2113-3-777'
答案 2 :(得分:4)
该行
while True:
创建一个无限循环。它将继续循环,直到程序崩溃或调用break
。 except
行是一个异常处理程序,它将捕获任何异常,此时调用break
退出无限循环。
答案 3 :(得分:2)
在“while True”中,True只是常量值True。因此,虽然True是永久循环或直到破碎。
除了使用s.index在i之后找不到更多字符串作为断开循环的方法时发生的异常。这是一件坏事。
尝试这样的事情(伪代码):
while you still have string left:
get index of next '-'
if found, add 1 to count
if count == 3:
return s[index+1:]
s[index+1:]
将索引后面字符的子字符串返回到结尾。