optionaler Platz in der Python-String-Formatierung

8

Angenommen, ich habe 3 Python-Strings, und ich kann alle 3 davon mit 2 getrennten Leerzeichen zwischen ihnen formatieren, wie im Folgenden:

%Vor%

oder

verwenden %Vor%

Angenommen, ich bin mir sicher, dass sowohl h als auch w Werte haben, aber m eine leere Zeichenfolge sein kann. Die beiden obigen Codefragmente würden sich mit "hello{two speces here}world ergeben.

Ich weiß, dass ich verschiedene Funktionen und bedingte Ausdrücke verwenden kann, um die Formatierung entweder mit Code wie in

durchzuführen %Vor%

oder wählen Sie eine andere Formatierungszeichenfolge

%Vor%

basierend auf der Länge von m.

My Q is Kann dies mit den Formatierungszeichenfolgen geschehen? (z. B. ein Format-Modifikator, der mit 1 Leerzeichen auffüllt, wenn sein Parameter nicht leer ist).

    
epeleg 25.10.2017, 07:53
quelle

5 Antworten

4

nicht sicher, es ist sehr bequem, aber es gibt eine Möglichkeit, Platz zu generieren oder nicht abhängig von der "Wahrheit" Wert der Zeichenfolgen:

%Vor%

Ergebnis:

%Vor%

Setzen Sie nun m auf eine leere Zeichenfolge, Sie erhalten

%Vor%     
Jean-François Fabre 25.10.2017, 08:03
quelle
3

Ich bin mir nicht sicher, ob das mit Formatierungszeichenfolgen möglich ist.

Ich würde dies mit Python-String-Join machen.

%Vor%

Der innere Teil [s for s in strings if len(s)>0] erstellt eine Liste mit nur den Strings ungleich Null Länge. Dann verbindet " ".join(...) diese zusammen mit einem Leerzeichen zwischen.

    
Chris Charles 25.10.2017 07:58
quelle
2

Ich glaube, das ist mit den Formatierungszeichenfolgen nicht alleine möglich.

Wenn Sie die Formatierungszeichenfolgen verwenden müssen, können Sie das Modul re verwenden, um nach dem Anwenden der Formatierung zusätzliche Leerzeichen zu entfernen:

%Vor%

was ausgeben würde:

%Vor%

mit einer leeren Zeichenfolge:

%Vor%

würde ausgeben:

%Vor%

Ist das, wonach Sie suchen?

    
goosfraba 25.10.2017 08:24
quelle
1

Ich werde die Antwort von Jean-François Fabre akzeptieren, die im Grunde genommen meine Frage beantwortet, indem ich sage, dass (zumindest für jetzt) ​​keine Antwort darauf gegeben ist Verwenden nur der Zeichenfolgenformatierung (d. h. wenn die zu formierenden Variablen nur h, m & amp; w ohne zusätzliche Verarbeitung sind).

Allerdings benutze ich das Konzept der booleschen Operatoren auf Strings wie in seiner Antwort, ich denke ich werde verwenden:

%Vor%

Das hat den Nachteil, dass die Person, die es liest, das Gefühl hat, dass vier Werte gebildet werden (was technisch aber nicht semantisch der Fall ist), aber ich denke, dass die Kürze und Einfachheit der Ausdrücke den negativen Aspekt überwinden.

Die Lesbarkeit konnte durch die Verwendung von parametrisierten Formaten, wie von @ Tsingyi vorgeschlagen, noch verbessert werden, wobei jedoch Folgendes verwendet wurde:

%Vor%

HINWEIS:
FOLGENDES FUNKTIONIERT NICHT ZUM SCHREIBEN:
Hoffentlich könnten wir in Zukunft vielleicht so etwas wie:

machen %Vor%

mit der Semantik von "optional (wenn m dann) richten Sie es nach rechts aus und füllen Sie es mit einem zusätzlichen Leerzeichen nach links" oder

%Vor%

mit der Semantik von "optional (wenn m dann) richtet es nach links aus und puffern mit einem zusätzlichen Leerzeichen nach rechts"

ähnliche Varianten können für die optionale Formatierung von Währungssymbolen hilfreich sein z.B.

%Vor%

liefert entweder eine leere Zeichenfolge oder $ 123

Eine letzte (lange) Notiz: Irgendwann während meiner Recherche zu diesem Thema dachte ich, dass ich vielleicht in der Lage wäre, so etwas zu tun:

%Vor%

aber es stellt sich heraus, dass dies ergibt:

%Vor%

vielleicht kann dies erreicht werden mit etwas wie das, was hier beschrieben wird: Ссылка

    
epeleg 25.10.2017 10:48
quelle
0

Sie könnten die parametrisierten Formate mit einer neuen Stilstringformatierung verwenden, aber Sie müssen immer noch testen, ob m leer ist oder nicht allein.

%Vor%     
Tsingyi 25.10.2017 08:55
quelle

Tags und Links