2009-06-26 10 views
0

Ich bearbeite meine Website und möchte einige Dinge auf den Seiten ändern.Text ersetzen, Jython, Regex

Ich wünsche die folgende Zeichenfolge ersetzen:

in the 
<SPAN class="Bold"> 
More... 
</SPAN> 
column to your right. 

Einige Male ist nicht über die <span> tags:

in the 
More... 
column to your right. 

Ich würde dies mit „unten“ ersetzen möchten. Ich habe versucht, dies mit einem einfachen replace() in Python zu tun, aber weil der Text manchmal nicht das <span> Tag hat und auf mehreren Zeilen ist, scheint es nicht zu funktionieren. Mein einziger Gedanke ist, reguläre Ausdrücke zu verwenden, aber ich bin mit den Regex nicht auf dem Laufenden, könnte jemand eine Hand leihen?

Dank

Eef

+0

Was ersetzen Sie durch "unten"? Der "Mehr ..." Teil oder alles? –

+0

Ich versuche, alles in beiden Situationen zu ersetzen. – RailsSon

+0

Ist der Text immer gleich? Und was genau sollte die Ausgabe sein? Wenn der Text nicht immer derselbe ist, dann meinen Sie mit "alles" nur die (falls vorhanden) und die "Mehr ..."? –

Antwort

2

Vorausgesetzt, dass Sie den HTML-Text in der Zeichenfolge "foo" haben, wird der Code dies in Python zu tun wäre, wie:

import re 
#re.DOTALL is used to make the . match all characters including newline 
regexp = re.compile('in the.*?More\.\.\..*?column to your right\.', re.DOTALL) 
re.sub(regexp, 'below', foo) 
+0

Nach dem Ausführen dieser über mehr als 2 HTML-Seiten bekomme ich einen Stackoverflow-Fehler, ich denke, es kann das Re.DOTALL sein, um die harten Renditen zu behandeln. : -/ – RailsSon

+1

@Eef: Soweit ich das beurteilen kann, sollte Jareds Lösung funktionieren. Ich kann Ihre Stapelüberlaufnachricht nicht reproduzieren. Es ist äußerst unwahrscheinlich, dass DOTALL einen Stapelüberlauf verursacht. Es tut nur, was Jared sagte. Es ist notwendig, alles (einschließlich Zeilenumbrüchen) zwischen "in the" und "More" anzupassen. Bitte zeigen Sie uns den Code, der Jareds Lösung implementiert, sowie die vollständige Traceback- und Fehlermeldung. –

+0

Diese Lösung funktionierte, ich hatte Probleme mit meiner Umgebung, die behoben wurde und das Problem nicht mehr gab. Prost – RailsSon

0

Try this:

import re 
pattern = re.compile('(?:<SPAN class="Bold">\s*)?More\.\.\.(?:\s*</SPAN>)?') 
str = re.sub(pattern, 'below', str) 

Die (?:…)-Syntax ist eine nicht erfassende Gruppierung, auf die nicht verwiesen werden kann als Rückbeziehung.