2016-11-24 5 views
0

Ich habe mehrere Wörter in einer Liste wie folgt gespeichert:Python 3 Regex entfernen Zeichen vor bestimmten Punkt

31547 4.7072% i 
25109 3.7466% u 
20275 3.0253% you 
10992 1.6401% me 
9490 1.4160% do 
7681 1.1461% like 
6293 0.9390% want 
6225 0.9288% my 
5459 0.8145% have 
5141 0.7671% your 

jetzt muss ich diese reinigen, so dass es alles vor dem (i) entfernt zu berücksichtigen, dass die Das Wort wird nicht immer (i) sein, aber das Format von allem wird ähnlich sein. Ich habe andere Fragen gesehen, die ähnlich sind, aber sie brauchten das Wort/str jedes Mal, um zu arbeiten.

Vielen Dank im Voraus für alle Hilfe und Beratung, habe ich versucht, lesen und tun Tutorials auf Regex, aber ich finde es ziemlich komplex, um Ihren Kopf herum.

für ein ähnliches Problem, das ich hatte ich brauchte, alles zu entfernen, innerhalb von Klammern, für die ich verwende:

Cleanse = re.sub('<.*?>', '', line) 

aber ich bin nicht sicher, wie dies zu manipulieren alles vor dem Wort zu entfernen, wie ich betonen werde Dies ist meine erste Echtzeit, in der ich Regex benutze.

+0

Geben Sie ein Beispiel für den Code an, mit dem Sie versucht haben, dieses Problem zu lösen. – asongtoruin

+0

** das Format von allem wird vorher ähnlich sein ** - eine genaue Beschreibung dieses Formats wird uns helfen, eine gut funktionierende Antwort zu liefern und könnte genug sein, um daraus eine Regex zu erstellen. Eine einzelne Eingabezeile macht es sehr schwer, das genaue Format zu erraten. –

+0

Probieren Sie 're (r '^ \ d + [\ t] + \ d + \. \ D +% [\ t] *', '', s, flags = re.M)'. Siehe [diese Demo] (https://regex101.com/r/c9NdCq/2). Wenn Sie den Text zeilenweise bearbeiten, müssen Sie nicht 're.M' verwenden. –

Antwort

1

eine mehrzeilige Zeichenfolge zu verarbeiten, Sie

s = re.sub(r'^\d+[ \t]+\d+\.\d+%[ \t]*', '', s, flags=re.M) 

verwenden Wenn Sie Zeile für Zeile zu verarbeiten,

r = re.compile(r'^\d+\s+\d+\.\d+%\s*') 
... 
s = r.sub('', s) 

die regex demo

Muster verwenden Siehe Erläuterung:

  • ^ - Beginn einer Zeichenfolge (oder Zeile, wenn re.M Flag gesetzt ist)
  • \d+-1 oder mehr Ziffern
  • \s+ - 1 oder mehrere Leerzeichen
  • \d+\.\d+ - 1+ digits, ., 1+ digits
  • % - ein wörtliches % Symbol
  • \s* - 0+ Whitespaces

Beachten Sie, dass in einer "mehrzeiligen" Version die [ \t] vorzuziehen ist, um nur horizontale ASCII-Leerzeichen zu entsprechen. Es kann auch mit einem komplizierteren Muster gemacht werden, das Unicode standardmäßig in Python 3.x kennt.

+1

Das ist brilliant, vielen Dank, es ist einfach zu lesen und zu verstehen –

Verwandte Themen