在Python中去掉字符第三次出现后的字符串

10 投票
4 回答
14943 浏览
提问于 2025-04-17 06:31

我想要去掉第三个字符之后的所有字符,比如说 - 例如。

我在网上找到了一段代码,它能实现这个功能,但我对它是怎么工作的有点困惑,所以想问一下,以便我能完全理解。

 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", "-")

它是怎么工作的:

  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"

撰写回答