简短的答案,如@ THC4K在评论中指出:
string.split(pattern, 1)[0]
string您的原始字符串在哪里,
pattern是您的“中断”模式,
1表示分割不超过1次,并且
[0]表示采用split返回的第一个元素。
实际上:
>>> s = "a descriptor 23 fd">>> s.split("23", 1)[0]'a descriptor '>>> s.split("fdasfdsafdsa", 1)[0]'a descriptor 23 fd'这是表达我之前写过的内容的一种简短得多的方法,无论如何我都会保留在这里。
而且,如果您需要删除多个模式,那么这是
reduce内置的最佳选择:
>>> string = "a descriptor dps foo 23 bar fd quux">>> patterns = ["dps", "23", "fd"]>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, string)'a descriptor '>>> reduce(lambda s, pat: s.split(pat, 1)[0], patterns, "uiopuiopuiopuipouiop")'uiopuiopuiopuipouiop'
这基本上是说:对于每个
patin
patterns:取
string并重复应用
string.split(pat,1)[0](如上所述),每次都对先前返回的值的结果进行运算。如您所见,如果字符串中没有任何模式,则仍返回原始字符串。
最简单的答案是将列表/字符串切片与组合在一起
string.find:
>>> s = "a descriptor 23 fd">>> s[:s.find("fd")]'a descriptor 23 '>>> s[:s.find("23")] 'a descriptor '>>> s[:s.find("gggfdf")] # <-- look out! last character got cut off'a descriptor 23 f'更好的方法(避免在
s.find返回-1时切断缺少的模式的最后一个字符)可能是包装一个简单的函数:
>>> def cutoff(string, pattern):... idx = string.find(pattern)... return string[:idx if idx != -1 else len(string)]... >>> cutoff(s, "23")'a descriptor '>>> cutoff(s, "asdfdsafdsa")'a descriptor 23 fd'
的
[:s.find(x)]语法的装置采取从索引为0的串,直至结肠的右手侧的部分;
在这种情况下,RHS是的结果
s.find,它返回您传递的字符串的索引。



