Frage

Dies ist eine sehr newbie Frage, und ich werde wahrscheinlich für sie bekommen Downvoted, aber ich konnte ganz ehrlich nicht die Antwort nach mindestens einer Stunde googeln finden. Ich lernte, wie Strings zu schneiden, basierend auf „genauen Standorte“, wo Sie genau wissen müssen, wo das Wort endet. Aber ich finde keinen Artikel, der erklärt, wie tun sie auf „nicht statisch“ Strings, die ändern könnte.

Auch ich will nicht string.split () in diesem Fall als ein wenig übertrieben verwenden, was ich brauche.

ich im Grunde habe eine Zeichenfolge wie folgt:

myString = "!save python Python is a high-level object oriented language created by Guido van Rossum."
# the format is !save [singleword] [definition]

Ich brauche diese Zeichenfolge „Scheibe“, aber ich kann einen richtigen Weg, es zu tun, herauszufinden.

Ich brauche den Titel ein, um Variable zu speichern (Python in diesem Fall) und die Definition dieser Zeichenfolge. Somethig wie:

title = myString[1]
definition = myString[everything after string[1]

Ich bin mir nicht ganz sicher, wie dies zu tun, wenn Sie eine dynamische Zeichenfolge haben, wo Sie nicht wissen, wo jedes Wort endet.

Ich würde schätzen einige Hinweise darüber, welche Funktionen / Methoden sollte ich diese Zeilen lesen auf archieve. Vielen Dank im Voraus.

War es hilfreich?

Lösung

Warum ist gespalten Overkill?

verb, title, definition = myString.split (' ', 2)

Andere Tipps

Wenn Sie Leerzeichen zwischen dem Befehl, Titel und Definition können Sie:

wordList = myString.split()
cmd = wordList[0] # !save
title = wordList[1] # python
definition = ' '.join(wordList[2:])  # Python is a high-level object oriented language created by Guido van Rossum.

Wenn Sie wirklich lieber nicht Split verwenden könnten Sie reguläre Ausdrücke verwenden:

import re
m = re.match('(/S+)/s*(/S+)/s*(.*)')
cmd = m.group(1)
title = m.group(2)
definition = m.group(3)

Die gewählte Antwort (nach PEP8ing):

verb, title, definition = my_string.split(' ', 2)

spaltet auf einem einzigen Raum. Es ist wahrscheinlich eine bessere Wahl auf Folgen von Whitespace zu spalten, nur für den Fall gibt es Registerkarten oder mehr Räume auf beiden Seiten des Titels:

verb, title, definition = my_string.split(None, 2)

Sehen Sie sich auch die Leerzeichen in der Definition der Normalisierung:

definition = ' '.join(definition.split())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top