2016-11-24 1 views
1

Ich muss die Zeichenfolge aus dem Teil entfernen, der vor dem Zeichen ':' auftritt, wobei ':' mehrmals vorkommen kann. Beispiel:Teil der Zeichenfolge vor einem bestimmten Zeichen abschneiden, wenn das Zeichen mehrmals auftritt

input: 'Mark: I am sending the file: abc.txt' 
output: 'I am sending the file: abc.txt' 

Die Funktion, die ich habe, ist dies (Python-Code)

def process_str(in_str): 
    str_list = in_str.split(':')[1:] 
    out_str = '' 
    for each in str_list: 
     out_str += each 
    return out_str 

Der Ausgang ich immer bin, ist 'I am sending the file abc.txt' ohne die zweite ':'. Gibt es eine Möglichkeit, dies zu korrigieren? Kann dieser Code auch in der Zeit- und Raumkomplexität effizienter gemacht werden?

+0

Könnten Sie mehr Beispiele geben. Ich bin mir nicht ganz sicher, was Sie danach haben. Warum ist nicht "Ich sende die Datei" gestreift? –

Antwort

0

split ist nicht der beste Ansatz dafür. Sie möchten einen regulären Ausdruck verwenden.

import re 

def process_str(in_str): 
    return re.sub('^.*?: ', '', in_str) 

Dies gibt die Zeichenfolge ohne etwas bis zum ersten : (Kolon durch Leerzeichen). Sie können mehr über reguläre Python-Ausdrücke lesen here.

+0

Danke. Das funktioniert perfekt. Ich dachte daran, Regex zu verwenden, aber ich bin nicht sehr kompetent damit. –

0

Was Sie wollen, ist out_str = ':'.join(in_str.split(':')[1:]): seit Sie alle ':' entfernt haben, müssen Sie sie wieder einfügen.

Ein besserer Weg wäre wahrscheinlich out_str = in_str[in_str.find(':')+1:] zu verwenden. find(':') gibt Ihnen den Index der ersten ':'.

+0

Und warum wurde das abgelehnt? Bitte erklären Sie, was mit meiner Antwort falsch ist ... – Julien

1

Wie wäre es mit split()?

str = 'Mark: I am sending the file: abc.txt' 

print(str.split(':', 1)[-1]) 

Verwenden -1 außerhalb der Grenzen für Listenindex zu berücksichtigen, wenn die delimter nicht in der ursprünglichen Zeichenfolge

Ausgang: 'Ich schicke die Datei: abc.txt'

Versuchen Sie es hier: https://repl.it/E6mj/1

Verwandte Themen