Ich mache ein Programm, um das Schreiben von C-Code zu automatisieren (ich schreibe, um Strings in Aufzählungen mit dem gleichen Namen zu parsen) Die Handhabung von Strings in C ist nicht so toll. Also haben mich einige Leute genervt, Python zu versuchen.
Ich habe eine Funktion erstellt, die C-Stil entfernen soll /* COMMENT */
y //COMMENT
aus einer Zeichenkette: Hier ist der Code:
def removeComments(string):
re.sub(re.compile("/\*.*?\*/",re.DOTALL ) ,"" ,string) # remove all occurance streamed comments (/*COMMENT */) from string
re.sub(re.compile("//.*?\n" ) ,"" ,string) # remove all occurance singleline comments (//COMMENT\n ) from string
Also habe ich diesen Code ausprobiert.
str="/* spam * spam */ eggs"
removeComments(str)
print str
Und es hat offenbar nichts gebracht.
Irgendwelche Vorschläge, was ich falsch gemacht habe?
Es gibt ein Sprichwort, das ich schon ein paar Mal gehört habe:
Wenn Sie ein Problem haben und versuchen, es mit Regex zu lösen, haben Sie am Ende zwei Probleme.
EDIT: Wenn ich Jahre später darauf zurückblicke. (nach etwas mehr Erfahrung beim Parsen)
Ich denke, dass Regex die richtige Lösung war. Und die hier verwendete einfache Regex ist "gut genug". Vielleicht habe ich das in der Frage nicht genug betont. Es ging um eine einzige spezifische Datei. Das hatte keine kniffligen Situationen. Ich denke, es wäre viel weniger Aufwand, die zu parsende Datei einfach genug für die Regex zu halten, als die Regex in eine unlesbare Symbolsuppe zu verkomplizieren (z.B. verlangen, dass die Datei nur //
einzeilige Kommentare).