第三次出现字符python后去掉字符串

can*_*289 8 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, '-')
Run Code Online (Sandbox Code Playgroud)

这是我关于while的问题:行什么是真的?另外除了:除了什么?为什么在那里编码?

提前致谢!

kin*_*all 27

这是一种方式:

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", "-")
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  1. 该字符串s是在出现的每个分隔分成列表d使用s.split(d).我们使用第二个参数来split指示要执行的最大拆分数(因为没有理由在第一次之后继续拆分n).结果是一个列表,例如["115Z2113", "3", "777", "55789ABC7777"]
  2. n使用列表的第一项切片[:n].结果是另一个列表,例如["115Z2113", "3", "777"]
  3. 该列表将连接回一个字符串,将分隔符放在d列表的每个项目之间,使用d.join(...),例如,"115Z2113-3-777"


Céd*_*ien 9

以单行方式:

data = '115Z2113-3-777-55789ABC7777'
strip_character = "-"
>>> strip_character.join(data.split(strip_character)[:3])
'115Z2113-3-777'
Run Code Online (Sandbox Code Playgroud)