2017-05-10 5 views
1

Ich habe einen Text in HTML, den ich später in einen Pandas Datenrahmen konvertieren möchte.Python Regex und Pandas

Ich habe einen Text, der wie so aussieht:

<tr> 
    <td -some attributes- >Val1</td> 
    <td -some attributes- >Val2</td> 
    <td -some attributes- >Val3</td> 
</tr> 
<tr> 
    <td -some attributes- >Val4</td> 
    <td -some attributes- >Val5</td> 
    <td -some attributes- >Val6</td> 
</tr> 

und ich habe die Regex: <td.*>(.*)</td> aber nicht fängt alle Werte, es cathces fast den ganzen Text ...

Nachdem ich alles erfasst habe, habe ich es in einen Datenrahmen eingefügt.

also warum diese Regex nicht die Werte abfangen, wie es sollte?

+1

ich beautifulsoup empfehlen würde stattdessen von regex https://pypi.python.org/pypi/beautifulsoup4 ..... zeigen Sie auch den tatsächlichen Code, den Sie versucht haben zu verwenden – depperm

+0

Es könnte sein, dass Sie jede Reihe einzeln betrachten, und dass ein Wert sich über mehrere erstreckt Zeilen oder so ganz anders. Ich stimme dem vorherigen Kommentar zu. Verwenden Sie beautifulsoup, um HTML zu analysieren. – JohanL

+0

Geben Sie ein Beispiel für Tags, die nicht erfasst werden. –

Antwort

1

Sie können wie diese versuchen, statt REGEX - nur eine Meinung

import pandas as pd 
movies_table = pd.read_html("xxx.y.com") 
movies = movies_table[0] // select the correct table from the tables array. 

Ich habe dies mit mir zu arbeiten. Im Folgenden habe ich eine Probe zur Verwendung beigefügt.

Reading directly table data as DataFrame

0

Wenn Sie (wirklich) eine RegEx verwenden möchten, können Sie wie folgt tun:

content = """\ 
<tr> 
    <td -some attributes- >Val1</td> 
    <td -some attributes- >Val2</td> 
    <td -some attributes- >Val3</td> 
</tr> 
<tr> 
    <td -some attributes- >Val4</td> 
    <td -some attributes- >Val5</td> 
    <td -some attributes- >Val6</td> 
</tr>""" 

import re 

td_regex = re.compile(r"<td[^>]+>" # <td> tag 
         r"((?:(?!</td>).)+)") # <td> content 

print(td_regex.findall(content)) 

Sie erhalten:

['Val1', 'Val2', 'Val3', 'Val4', 'Val5', 'Val6']