Ich habe ein Python 2.7-basiertes Programm, das Eingaben von einem Benutzer (entweder als Textdatei) oder direkt an der Eingabeaufforderung nimmt. Ich muss dann die Eingabe verifizieren, um sicherzustellen, dass sie im richtigen Format ist (und bei Bedarf mit Code neu formatieren).Verwenden nicht-gieriger Qualifier im regulären Ausdruck '*?'
Ideal Eingaben von Benutzer getrennte Wörter durch Kommas wie "blade, coffeen, cardiac".
Aber ich wollte wird einen Scheck an setzen Eingaben im Format haben, damit "blade, coffeen, , cardiac"
"blade,,cofeen,cardiac"
"blade coffeen cardiac"
usw.
Dies bedeutet, dass ich wahrscheinlich verwenden ein nicht-gieriger Qualifier wie *?
. Obwohl ich grundlegende reguläre Ausdrücke kenne, ist diese bestimmte *?
ein bisschen unklar. Im Moment verwende ich input_string.split(',')
, gefolgt von einem input_string.split(' ')
, um die verschiedenen Szenarien zu berücksichtigen, aber irgendwie fühlt es sich zu unpythonisch und chaotisch an. Ich frage mich auch, ob es Szenarien gibt, an die ich nicht gedacht habe und die den Code in der Produktion brechen werden.
im Internet sucht, um dieser Link https://docs.python.org/2/howto/regex.html hat einen ziemlich guten Job zu erklären, wie .*?
funktioniert, und ich denke, wenn ich [, ]*?
verwenden, dass mein Problem lösen kann.
Meine Frage ist:
1. Kann ich [, ]*?
in meinem Fall verwenden, um die drei möglichen Szenarien für Eingaben zu berücksichtigen, die ich oben beschrieben habe?
Wie ich erwähnt habe, benutze ich string.split(',')
nach der Validierung sowieso gefolgt von einem string.split(' ')
, aber eine regelmäßige Ausdrucksprüfung wird es sauberer machen. Auf jeden Fall würde ich gerne verstehen, wie genau sich das [, ]*?
verhält, wenn es benutzt wird.
Verwenden [Regex101] (https://regex101.com) Ihre RegEx zu testen. [Ihre Demo] (https://regex101.com/r/lF4zL7/1) – Druzion
Was passiert, wenn der Eingang 'Thomas Edison, leonardo da vinci'? –
@Druzion Vielen Dank für diesen Regex-Testlink. Es ist toll. – schywalker