2016-06-08 5 views
2

Ich bin neu in regulären Ausdruck/Python, aber ich versuche, eine Revisionsnummer von einer HTML-Seite zu extrahieren. Ich benutzte einen Proxy und Urllib, um die gelesene Seite in einer Zeichenkette zu speichern. Ich habe einige Text, der wie folgt aussieht:Wie kann ich regulären Ausdruck/Python verwenden, um alle Ganzzahlen nach einer bekannten Zeichenfolge, einer unbekannten Zeichenfolge und einer anderen bekannten Zeichenfolge zu finden?

<p>Proxy 3.2.1 r72440<br> 
SlotBios 11.00</p> 
<p><strong><span style="color: rgb(255, 0, 0);">Random Text 4.23.6 r98543<br> 
...</tr>... 
<p><strong><span style="color: rgb(255, 0, 0);">Random Text 4.33.6 r98549<br> 

Ich möchte den Text analysieren und extrahieren Sie die Versionsnummern entsprechend den Linien von rot. So in diesem Beispiel mag ich 98.543 analysieren und 98549.

Ich bin in der Lage, die Linien alle mit im Allgemeinen zu analysieren aus:

paragraphs = re.findall(r'r(\d*)<br>',str(html)) 

Allerdings bin ich ein wenig hängen, wie zu tun es so, dass ich nur die roten Linien finden kann. Mein aktueller Code würde auch 72440 enthalten. Irgendeine Idee, wie man das umgeht? Vielen Dank!

+0

Haben die Revisionsnummern immer die gleiche Anzahl an Zeichen? Vielleicht solltest du stattdessen versuchen, die Schnur von hinten zu schneiden. – LordNeo

+0

Die Regex-Engine ist farbenblind. Es kann nicht feststellen, welche Farbe Ihre Linien in einem Webbrowser wiedergeben würden. Gibt es einen anderen Hinweis, den Sie verwenden können, um die gesuchten Zahlen zu identifizieren? –

+0

[Regex nicht verwenden, um HTML zu analysieren] (http://Stackoverflow.com/a/1732454/5323213) –

Antwort

0

Wenn Sie wissen, dass Sie nur für die Linien suchen, der das Muster color: rgb(255, 0, 0) enthalten, fügen Sie dann das Muster auf Ihre regexp:

paragraphs = re.findall(r'color: rgb\(255, 0, 0\).*r(\d*)<br>',str(html)) 
1

Sie benötigen einen HTML-Parser verwenden Sie die Tags filtern, um zu helfen, dass haben die rote Farbe aufgetragen, dann Ihren regulären Ausdruck auf den Inhalt des Tags verwenden:

>>> from bs4 import BeautifulSoup 
>>> html = ''' (your html here) ''' 
>>> parser = BeautifulSoup(html, 'html.parser') 
>>> for span_tag in parser.find_all('span', style='color: rgb(255, 0, 0);'): 
... print(span_tag.text) 

Random Text 4.23.6 r98543 

anschließend können Sie den gesamten Text sammeln, und führen Sie Ihre regulären Ausdruck über sie die Versionsnummern filtern:

>>> t = [i.text for i in parser.find_all('span', style='color: rgb(255, 0, 0);')] 
Verwandte Themen