2016-04-16 13 views
2

Ich versuche, in eine HTML-Datei übereinstimmen. Dies ist der html:Python regulären Ausdruck übereinstimmen in HTML-Datei

<td> 
<b>BBcode</b><br /> 
<textarea onclick='this.select();' style='width:300px;  height:200px;' /> 
[URL=http://someimage.com/LwraZS1]   [IMG]http://t1.someimage.com/LwraZS1.jpg[/IMG][ [/URL] [URL=http://someimage.com/CDnuiST] [IMG]http://t1.someimage.com/CDnuiST.jpg[/IMG] [/URL] [URL=http://someimage.com/Y0oZKPb][IMG]http://t1.someimage.com/Y0oZKPb.jpg[/IMG][/URL] [URL=http://someimage.com/W2RMAOR][IMG]http://t1.someimage.com/W2RMAOR.jpg[/IMG][/URL] [URL=http://someimage.com/5e5AYUz][IMG]http://t1.someimage.com/5e5AYUz.jpg[/IMG][/URL] [URL=http://someimage.com/EWDQErN][IMG]http://t1.someimage.com/EWDQErN.jpg[/IMG][/URL] 
</textarea> 
</td> 

Ich möchte alle BB-Code von [zu] enthalten enthalten.

Und dies ist mein Code:

import re 
x = open('/xxx/xxx/file.html', 'r').read 
y = re.compile(r"""<td> <b>BBcode</b><br /><textarea onclick='this.select();' style='width:300px; height:200px;' />. (. *) </textarea> </td>""") 
z = y.search(str(x()) 
print z   

Aber wenn ich das i Objekt erhalten Keine laufen ... Wo ist der Fehler?

+0

vergessen paren 'read()'. –

+0

Nichts, immer noch eine None .. Vielleicht ist die Regex falsch .. –

+0

Yeah, gepostet eine answer.check. –

Antwort

0

Ich würde einen Parser für diese verwenden:

from html import HTMLParser 

class MyHtmlParser(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.convert_charrefs = True 
     self.dat = [] 
    def handle_data(self, d): 
     self.dat.append(d.strip()) 
    def return_data(self): 
     return self.dat 
>>> with open('sample.html') as htmltext: 
     htmldata = htmltext.read() 
>>> parser = MyHtmlParser() 
>>> parser.feed(htmldata) 
>>> res = parser.return_data() 
>>> res = [item for item in filter(None, res)] 
>>> res[0] 
'BBcode' 
>>> 
+0

Danke für Ihre Antwort! Eigentlich, wenn ich dieses Skript ausführen und versuchen, res [0] zu drucken, bekomme ich diesen Teil des html: box-shadow { -moz-box-shadow: 3px 3px 5px # 000000; -webkit-box-shadow: 3px 3px 5px # 000000; Box-Schatten: 3px 3px 5px # 000000; } –

+0

Oh vergiss, ich musste 4. Argument drucken. Genau was ich brauchte. Danke vielmals! Eine letzte Sache, wie kann ich die Ausgabe in eine Datei schreiben !? –

+0

Als einfache Textdatei: 'mit open ('filename.txt', 'w') als newfile: newfile.write (res [0])' –

0

Ich denke, Sie müssen etwas wie z.group() hinzufügen, um aus dem Regex-Objekt, nicht wahr? Also, nur wenn Sie Ihre letzte Zeile zu

Druck z.group()

könnte es tun.

0
import re 
x = open('/xxx/xxx/file.html', 'rt').read() 
r1 = r'<textarea.*?>(.*?)</textarea>' 
s1 = re.findall(r1, s, re.DOTALL)[1] # just by inspection 
r2 = r'\[(.*?)\]' 
s2 = re.findall(r2, s1) 
for u in s2: 
    print(u) 
+0

Danke, es funktioniert, aber es bekommt einen anderen Teil des HTML, weil sein Alles innerhalb