2016-12-01 1 views
2

Beispiel:Wie kann man einen String teilen und String-Positionen von Elementen vor dem Split hinzufügen?

s=" 300  january  10  20  " 
mylist = s.split() 
mylist = ['300', 'january', '10', '20'] 

Wie kann ich eine Liste Hinzufügen der Zeichenkette Position der Elemente vor der Spaltung zu erstellen:

mylistStringPos = [['300',startpos:endpos],...] 
mylistStringPos = [['300',2:5], '['january',12:19]', '['10',25:27]', '['20',34:36]']] 

Gibt es eine Möglichkeit in Python, dies zu tun?

+0

Welche Art ist '2 : 5'? Ist es eine Saite, "2: 5"? Was ist mit den Ausgaben ['[300', 2, 5], ['Januar', 12, 19], ['10', 25, 27], ['20', 34, 36]] 'Ausgabe? –

Antwort

5

Sie re mit dem \S+ Muster verwenden können keine Leerzeichen Textteile und m.group(), Zugang m.start() und m.end() passen die notwendigen Daten zu sammeln:

import re 
s=" 300  january  10  20  " 
print([[x.group(), x.start(), x.end()] for x in re.finditer(r'\S+', s)]) 
# => [['300', 2, 5], ['january', 12, 19], ['10', 25, 27], ['20', 34, 36]] 

Siehe this Python demo

+1

so einfach :) Danke Wiktor – Reman

+0

Wiktor, nur eine letzte Frage: wenn ich die Zeichenfolge nur teilen möchte, wenn es 2 Leerzeichen mehr zwischen den Elementen gibt, wie muss ich den Fisher Regex anpassen? – Reman

+1

Verwenden Sie ['r '\ S + (?: \ S \ S +) *''] (https://regex101.com/r/Qr9sRX/1). Oder wenn Sie nur * Zeilen *, 'r '\ S + (?: [^ \ S \ r \ n] \ S +) *' verarbeiten. –