2017-09-15 5 views
3

Ich schaue, um Preise aus einer Reihe von Scraped-Daten zu extrahieren.Preise mit Regex extrahieren

Ich verwende diese im Moment:

re.findall(r'£(?:\d+\.)?\d+.\d+', '£1.01') 
['1.01'] 

Welche feinen 99% der Zeit arbeitet. sehen dies jedoch ich gelegentlich:

re.findall(r'£(?:\d+\.)?\d+.\d+', '£1,444.01') 
['1,444'] 

Ich möchte ['1444.01'] ideal, um zu sehen.

Dies ist ein Beispiel für die Zeichenfolge, aus der ich die Preise extrahiere.

'\n    £1,000.73    \n\n\n    + £1.26\nUK delivery\n\n\n' 

Ich bin nach etwas Hilfe die Regex die Zusammenstellung zu ['1000.73', '1.26'] von der oben Zeichenfolge erhalten

Antwort

3

Sie alle Werte mit '£(\d[\d.,]*)\b' greifen kann und dann entfernen Sie alle Kommas mit

import re 
s = '\n    £1,000.73    \n\n\n    + £1.26\nUK delivery\n\n\n' 
r = re.compile(r'£(\d[\d.,]*)\b') 
print([x.replace(',', '') for x in re.findall(r, s)]) 
# => ['1000.73', '1.26'] 

Siehe das Python demo

Das £(\d[\d.,]*)\b Muster findet £ und erfasst dann eine Ziffer und dann alle 0+ Ziffern/,/., so viele wie möglich, aber zurück zu einer Position, wo eine Wortgrenze ist.

+0

Gute Lösung - Ich werde es versuchen. Danke, Wiktor –