Da Sie len(trailing)
irgendwie erhalten haben (wo trailing
ist die Zeichenfolge, die Sie entfernen möchten, wenn es Hinter), würde ich empfehlen, zu vermeiden die leichte Vervielfältigung von Arbeiten, die in diesem Fall .endswith
verursachen würden. Natürlich ist der Beweis für den Code in das Timing ist, so lassen Sie uns einige Mess tun (die Funktionen zu benennen, nachdem die Befragten sie vorschlägt):
import re
astring = 'this is some string rec'
trailing = ' rec'
def andrew(astring=astring, trailing=trailing):
regex = r'(.*)%s$' % re.escape(trailing)
return re.sub(regex, r'\1', astring)
def jack0(astring=astring, trailing=trailing):
if astring.endswith(trailing):
return astring[:-len(trailing)]
return astring
def jack1(astring=astring, trailing=trailing):
regex = r'%s$' % re.escape(trailing)
return re.sub(regex, '', astring)
def alex(astring=astring, trailing=trailing):
thelen = len(trailing)
if astring[-thelen:] == trailing:
return astring[:-thelen]
return astring
Sagen wir diese Python-Datei mit dem Namen haben a.py
und es ist in der Aktuelles Verzeichnis; jetzt, ...:
$ python2.6 -mtimeit -s'import a' 'a.andrew()'
100000 loops, best of 3: 19 usec per loop
$ python2.6 -mtimeit -s'import a' 'a.jack0()'
1000000 loops, best of 3: 0.564 usec per loop
$ python2.6 -mtimeit -s'import a' 'a.jack1()'
100000 loops, best of 3: 9.83 usec per loop
$ python2.6 -mtimeit -s'import a' 'a.alex()'
1000000 loops, best of 3: 0.479 usec per loop
Wie Sie sehen, die RE-basierte Lösungen sind „hoffnungslos deklassiert“ (wie es oft geschieht, wenn ein „Overkills“ ein Problem - möglicherweise einer der Gründe, REs haben so eine schlechte Rep in der Python-Community! -), obwohl der Vorschlag in @ Jacks Kommentar viel besser ist als @ Andrews Original. Die String-basierten Lösungen, wie erwartet, shing, mit meinem endswith
-Vermeiden, dass man einen winzigen Vorteil gegenüber @ Jack's (nur 15% schneller). Also, beide Pure-String-Ideen sind gut (und beide sind prägnant und klar) - ich bevorzuge meine Variante ein bisschen nur, weil ich, Charakter, ein sparsamer bin (manche sagen, geizig ;-) Person .. . "verschwenden Sie nicht, will nicht" -)
möglich Duplikat [Python entfernen letzten 3 Zeichen einer Zeichenfolge] (http://stackoverflow.com/questions/1798465/python-remove-last-3-characters-of- a-string) – outis
mögliches Duplikat von [Wie entferne ich eine Teilzeichenfolge am Ende einer Zeichenfolge in Python?] (http://stackoverflow.com/questions/1038824/how-do-i-remove-a-substring-) von der Ende-einer-Zeichenfolge-in-Python) –