Text ist:
WYATT - Ranked # 855 with 0.006 %
XAVIER - Ranked # 587 with 0.013 %
YONG - Ranked # 921 with 0.006 %
YOUNG - Ranked # 807 with 0.007 %
Ich will nur bekommen
WYATT
XAVIER
YONG
YOUNG
Ich habe es versucht :
(.*)?[ ]
Aber es gibt mir die:
WYATT - Ranked
'\t'
. Es stimmt, es wird nicht funktionieren, wenn Sie mehrere Trennzeichen haben, obwohl es selbst mit 2 oder 3 Trennzeichen nicht sehr schwierig wäre,split
oderpartition
anstelle von Regex zu verwenden.some_string.split(None, 1)[0]
funktioniert, wenn mehr als ein Leerzeichen das erste Wort trennt.firstword, leftoverstring = some_string.split(' ', 1)
Wenn Sie sich besonders schlau fühlen möchten, können Sie es wie folgt schreiben:
(firstWord, rest) = yourLine.split(maxsplit=1)
Dies soll das Beste aus beiden Welten bringen:
maxsplit
während Sie mit einem beliebigen Leerzeichen teilenIch habe mich irgendwie in diese Lösung verliebt und sie ist allgemein auspackbar, also musste ich sie teilen. :) :)
quelle
firstWord, rest = yourLine.split(None, 1)
Lesbarkeit verlieren.(firstWord, *_) = yourLine.split(maxsplit=1)
. Verwenden Sie*_
anstelle von "_
weil"split()
eine variable Anzahl von Argumenten gemäß demmaxsplit
Parameter zurückgibt. Dies ist zukunftssicher.*
wennmaxsplit=1
es verwendet wird. Es gibt nur eine begrenzte Anzahl von Ergebnissen.maxsplit
Wert ändern , aber kein zusätzliches Tupelelement hinzufügen, um den zusätzlichen Wert wie in zu entpacken(firstWord, rest) = yourLine.split(maxsplit=2)
, erhalten SieValueError: too many values to unpack
. Ein zusätzlicher Bonus ist, dass Sie keine nicht verwendete Variable erstellenrest
.Du solltest so etwas tun wie:
print line.split()[0]
quelle
print line.split(' ', 1)[0]
. Dies begrenzt die Aufteilung auf das erste Wort.Verwenden Sie diesen regulären Ausdruck
\w+
entspricht 1 bis vielen Zeichen.\w
ist ähnlich wie[a-zA-Z0-9_]
^
zeigt den Anfang einer ZeichenfolgeÜber Ihren Regex
Ihre Regex
(.*)?[ ]
sollte sein^(.*?)[ ]
oder^(.*?)(?=[ ])
wenn Sie den Platz nicht wollenquelle
Ich brauche keine
regex
.string[: string.find(' ')]
quelle
split
oderpartition
, denke ich. Erhalten Sie auf diese Weise eine sinnvolle Leistung oder Gedächtnisgewinne? Sie müssten damit im Wesentlichen zweimal zur ersten Instanz des Tokens iterieren, aber auf der anderen Seite würden Sie nicht mit der neuen Schwanzschnur enden, die Sie einfach wegwerfen ...split
mit einem Token-Limit nochpartition
.string.find
kehrt-1
, um das letzte Zeichen zu entfernen.Sie benötigen keinen regulären Ausdruck, um eine Zeichenfolge in Leerzeichen zu teilen:
In [1]: text = '''WYATT - Ranked # 855 with 0.006 % ...: XAVIER - Ranked # 587 with 0.013 % ...: YONG - Ranked # 921 with 0.006 % ...: YOUNG - Ranked # 807 with 0.007 %''' In [2]: print '\n'.join(line.split()[0] for line in text.split('\n')) WYATT XAVIER YONG YOUNG
quelle