[python] Pomoc s pythonním RE

David Rohleder davro na ics.muni.cz
Sobota Leden 12 23:13:39 CET 2013


> print re.sub(r'.*(<script.*>)(.*)(</script>).*',

problém je v "...t.*>", .* sežere všechno, protože matchování je greedy.
Můžeš místo .* použít třeba [^>]* (tj. cokoliv s výjimkou > ) nebo
přepnout na non-greedy matchování.

Ale ani jedno ti neřeší problém, protože následující (.*) ti sežere
všechno do posledního výskytu </script>, takže stačí, když budeš mít dva
javaskripty za sebou a už to zase nepojede, protože .* sežere všechno až
do posledního </script>

Správné řešení je použití DOM parseru a následné vyházení všech podvětví
s tagem <script>

David



Bystroushaak píše v So 12. 01. 2013 v 22:17 +0100:
> Zdravím.
> 
> Potřebuji pomoc s pythonním re modulem. Hraji si s tím už několik hodin
> a už jsem z toho v koncích.
> 
> Mám script:
> 
> -------------------------------------------------------------------------------
> import re
> 
> data = """<tr><td class="newscap"><b style="font-size:13px">Downtime for
> Christmas</b>
> 		<br><small>by <script language="javascript">document.write('<a
> class=\"cap\"
> href=\"mailto:'+rot(5,'mvoogz na vrvmzizorjmf.jmb')+'\">'+rot(5,'mvoogz na vrvmzizorjmf.jmb')+'</a>')</script><noscript>rattle</noscript>
> on 12/30/12 10:48</small></td></tr>
> 		<tr><td class="aware" colspan="2">
> 		So, it appears the site was down for christmas. I could try to find
> out why, but I don't care enough. Went to <a
> href="https://events.ccc.de/congress/2012/wiki/Main_Page">29c3</a>,
> didn't get much done, ate a lot of fast food. I'm old, fat, and boring
> now. However, I found out about <a
> href="http://www.hyperelliptic.org/tanja/newelliptic/newelliptic.html">Edwards
> curves</a>, that shit is rad.
> 		</td></tr>"""
> 
> print re.sub(r'.*(<script.*>)(.*)(</script>).*',
> r"\n\n---\1\n---\2\n---\3", data)
> -------------------------------------------------------------------------------
> 
> Který po spuštění vypíše:
> 
> -------------------------------------------------------------------------------
> <tr><td class="newscap"><b style="font-size:13px">Downtime for Christmas</b>
> 
> 
> ---<script language="javascript">document.write('<a class="cap"
> href="mailto:'+rot(5,'mvoogz na vrvmzizorjmf.jmb')+'">'+rot(5,'mvoogz na vrvmzizorjmf.jmb')+'</a>
> ---')
> ---</script>
> 		<tr><td class="aware" colspan="2">
> 		So, it appears the site was down for christmas. I could try to find
> out why, but I don't care enough. Went to <a
> href="https://events.ccc.de/congress/2012/wiki/Main_Page">29c3</a>,
> didn't get much done, ate a lot of fast food. I'm old, fat, and boring
> now. However, I found out about <a
> href="http://www.hyperelliptic.org/tanja/newelliptic/newelliptic.html">Edwards
> curves</a>, that shit is rad.
> 		</td></tr>
> -------------------------------------------------------------------------------
> 
> Mým cílem je mít ve skupině \1 tag <script>, tedy <script
> language="javascript">, v \2 pak tělo tagu. V současné podobě se mi
> oboje spojuje do \1.
> 
> "Živá" ukázka: http://ideone.com/TfbmB1
> 
> Prosím o nakopnutí správným směrem.
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python




Další informace o konferenci Python