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

时间:2011-11-17 16:46:40

标签: 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, '-')

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

提前致谢!

4 个答案:

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

工作原理:

  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"

答案 1 :(得分:8)

以单行方式:

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

答案 2 :(得分:4)

该行

 while True:

创建一个无限循环。它将继续循环,直到程序崩溃或调用breakexcept行是一个异常处理程序,它将捕获任何异常,此时调用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:]将索引后面字符的子字符串返回到结尾。