2016-12-06 7 views
0

Ich versuche, einen Weg zu finden, einen einzigen Ausdruck zu erstellen, der sowohl für branch1 als auch für branch2 funktioniert: Ich muss die Wörter -dev und -rel vom Zweig entfernen, wie kann ich das tun?Wie erstelle ich eine Regex um mehrere Zeichen zu entfernen?

chars_to_remove = ['-dev','-rel'] 
branch1 = 'bt.lnx.2.1-dev' 
branch2 = 'bt.lnx.2.1-rel' 
component = branch1.translate(None, ''.join(chars_to_remove))//should work for both branch1 & branch2 
print component 

ERWARTETES ERGEBNIS: (für beide branch1 und branch2) -

bt.lnx.2.1 

Antwort

2

Versuchen Sie folgendes:

print (branch1.replace('-dev','').replace('-rel','')) 

print (branch2.replace('-dev','').replace('-rel','')) 
0
import re 

chars_to_remove = ['({}.*)'.format(i) for i in chars_to_remove] 

def trimmer(your_string): 
    return re.sub(r'|'.join(chars_to_remove),'',your_string) 

print trimmer(branch1) 
print trimmer(branch2) 

Ausgang:

'bt.lnx.2.1' 
'bt.lnx.2.1' 
+0

was ist, wenn ich zu entferne '-dev auch alle das Spiel mit Spiel wollen entfernen. * 'und '-rel. *', alles nach -dev und -rel muss entfernt werden? – user3508811

+0

diese Logik schlägt fehl für 'com-devices.lnx.1.0-dev', die Ausgabe ist' com', sollte es 'com-devices.lnx.1.0' sein – user3508811

-1

Wenn sie immer am Ende sind, können Sie einfach String-Slicing verwenden.

Wenn sie nicht alle am Ende sind, möchten Sie vielleicht das Re-Modul verwenden.

+0

Was ist, wenn die zu entfernenden Teile nicht die gleiche Länge haben? (Kein Downvoter). –

+0

@Ahsanul Guter Punkt. Aus dem Wortlaut der Frage schien mir, dass OP nur an den genannten spezifischen Fällen interessiert ist, daher glaube ich nicht, dass unterschiedliche Längen hier eine Rolle spielen. Definitiv etwas zu beachten. Vielen Dank. –

0

Verwendung regex, es chars_to_remove am Ende der Zeichenfolge entfernen, die $ aus der Regex entfernen, wenn Sie bei mittleren

import re 
chars_to_remove = ['-dev','-rel'] # modify char to remove here 
def remove_char(s): 
    return re.sub("({})$".format('|'.join(chars_to_remove)), '', s) 

branch1 = 'bt.lnx.2.1-dev' 
branch2 = 'bt.lnx.2.1-rel' 
remove_char(branch1) # 'bt.lnx.2.1' 
remove_char(branch2) # 'bt.lnx.2.1' 
+0

Ich denke, hardcoded Regex ist nicht ganz für diesen Anwendungsfall. Wenn OP eine neue Erweiterung hinzufügen würde (zum Beispiel 'rpm'), würden Sie es in Ihrem Regex hinzufügen? Ist es eine gute Lösung? Insbesondere wenn OP bereits eine Liste gebildet hat, sollten Sie die Liste beim Schreiben der Lösung berücksichtigen. –

+0

@Ahsanul Haque, aktualisiert, jetzt ist es ganz in der Nähe Ihrer Antwort :) – Skycc

Verwandte Themen