[python] reguläre ausdrücke

mondschein85

Mitglied
hallo,

kur zu den Umständen meines Problems:
bin absoluter Python Newbie und auch in Bereich Reguläre Ausdrück völlig neu, aber lernbereit

ich benutze Mediawiki 1.10 und habe dort eine Extension (Wikipdf: http://sourceforge.net/projects/wikipdf/). die Scripts der Extension sind in Python geschrieben.
Mein Problem is nun das die Skripts Fehler haben, die ich beheben will...habe mir auch schon ein paar Python Bücher geholt und im Internet gegooglet doch irgendwie check ich den Ablauf des Hauptprogramms nicht:

Code: http://paste.pocoo.org/show/32961/

ich weiß das war jetzt ne menge code
in zeile 108 beginnt der translate ausdruck...hier wird mir regulären ausdrücken gearbeitet
und ab zeile 530 geht glaube ich mein problem los...jedenfalls so weit ich das beurteilen kann.

noch ganz kurz was das eigentliche problem ist:
ich hab einen wiki eintrag dort werden latex befehle mit <math></math> gewrappet aber innen drin stehen schon die richtigen latex befehle...mit meiner extension verwandle ich den wiki code in latex um um dann daraus ein pdf zu generieren...

ein paar versuche etwas in der translation tabelle regeln zu ändern habe ich schon (auch bei anderen befehlen, wo es allerdings funktioniert)...aber die führen entweder zu satten fehlern oder bringen trotzdem nur ne falsche ausgabe...

was meine meinung nach richtig aussieht(,aber da ich nciht wirklcih ahnugn von regulären ausdrücken habe, dies ncihts zu sagen hat) ist:

Zitat:
( '(?s)<math>(.*?)</math>' , r'\\${\1}\\$' ),
durch das r' reicht ein \ um den \ zu schützen oder°!?

naja die dementsprechende ausgabe dannach ist:

TeX:
Zitat:
${\sqrt\{\sum\_0\^{}n a\_n\^{}2\}}$
richtig wär:
Zitat:
\sqrt{\sum_0^n a_n^2}
(und so steht es ja auch im wiki code)...

was amche ich falsch...ich will doch nur das er die <math> und </math> mit /$ ersetzt und den rest so lässt...bin völlig am verzweifeln


liebe grüße mondschein85
 
Hi.
( '(?s)<math>(.*?)</math>' , r'\\${\1}\\$' ),
durch das r' reicht ein \ um den \ zu schützen oder°!?
Ja.
naja die dementsprechende ausgabe dannach ist:

TeX:
Zitat:
${\sqrt\{\sum\_0\^{}n a\_n\^{}2\}}$
richtig wär:
Zitat:
\sqrt{\sum_0^n a_n^2}
(und so steht es ja auch im wiki code)...
Wie ist denn die Eingabe? Und in welche Zeile hast du denn das Tupel hinzugefügt? Sicher doch vor Zeile 165-166, oder?!

Gruß
 
also als och das ausprobier hatte, habe ich zeile 167 und 168 auskommentiert und es einfach drunter hinzugefügt.
ein hauptproblem is, dass das probgramm den text der zwischen den <math<</math> tupel steht, da jedes "wort" neu durch die übersetzungstabelle schickt...und dem entsprechen alle \ nochmal mit \ gewrapped (geschützt) werden...da sie ja in latex ne andere bedeutung haben...aber genau das will ich ja nicht...ich will dass das programm sieht aha hier is <math> so dann lassen wir alle wörter bis </math> einfach wie sie sind und dann geht's normal weiter im programm :(

ich glaube der ansatzpunkt liegt ab zeile 530...weil hier wird ja alles mit math gesucht gecentert und mit text = re.sub(r'\$', r'\$', text) gewrapped oder!? ich versteh sowie so nicht so richtig wie das alles funktioniert...
also ich krieg den ganzen text und dann sucht die funktion dowiki den text stück für stück durch um dann in der for schleife die einzelnen übersetzungen zu machen d.h. der string text wird die ganze zeit verändert und gleichzeitig gespeichert...oder
gibt es nciht eine möglichkeit praktisch die kommenden wörte ab <math> bis </math> zu überspringen°?

liebe grüße
mondschein85
 
Hi.

Könntest du das alles auch so formulieren, das man es verstehen kann? Und bitte halte dich an die Netiquette Punkt 14! Oder ist deine Umschalttaste kaputt? :suspekt:
also als och das ausprobier hatte, habe ich zeile 167 und 168 auskommentiert und es einfach drunter hinzugefügt.
Warum darunter? Dann hat dein Tupel doch gar keine Wirkung mehr, denn <math> und </math> werden doch bereits in Zeile 165-166 ersetzt... (wir sprechen doch von der Datei http://paste.pocoo.org/show/32961/ oder?)
ein hauptproblem is, dass das probgramm den text der zwischen den <math<</math> tupel steht, da jedes "wort" neu durch die übersetzungstabelle schickt...und dem entsprechen alle \ nochmal mit \ gewrapped (geschützt) werden...da sie ja in latex ne andere bedeutung haben...aber genau das will ich ja nicht...ich will dass das programm sieht aha hier is <math> so dann lassen wir alle wörter bis </math> einfach wie sie sind und dann geht's normal weiter im programm :(

ich glaube der ansatzpunkt liegt ab zeile 530...weil hier wird ja alles mit math gesucht gecentert und mit text = re.sub(r'\$', r'\$', text) gewrapped oder!?
Wovon sprichst du? In Zeile 530 steht "return itext"?!
also ich krieg den ganzen text und dann sucht die funktion dowiki den text stück für stück durch um dann in der for schleife die einzelnen übersetzungen zu machen d.h. der string text wird die ganze zeit verändert und gleichzeitig gespeichert...oder
Ja.
gibt es nciht eine möglichkeit praktisch die kommenden wörte ab <math> bis </math> zu überspringen°?
Wenn man es umprogrammiert...

Gruß
 
Hallo,

natürlich ist mein Umschalttaste nicht kaputt :suspekt:...Es ist ehr Gewohnheit :(, aber ich werde mir in Zukunft Mühe geben.
Genau ich meine den Link, aber ich glaube entweder verrutsche ich andauernd beim gucken um ein paar Zeilen oder du, oder evtl. liegt es auch am Browser. :confused:

Die Zeilen die ich meine:

( r'(?s)<math>(.*?)' , r'\\begin{equation}' ),
( r'(?s)</math>(.*?)' , r'\\end{equation}' ),
diese waren auskommentiert, bei meinem Testlauf.

Mein Problem fängt mit der Funktion/Methode: def doWiki(text): (dies sollte sich dann bei dir in Zeile 533 befinden, oder?)

In welcher FOrm könnte ich das Ganze umprogrammieren? Was hast du für eine Idee?

Liebe Grüße Mondschein85
 
Du sag mal, im Punkt 14 steht:

Erstelle aussagekräftige Betreff-Zeilen für Deine eigenen Beiträge. Mit nicht aussagekräftigen Betreff-Zeilen wie z.B. "Hilfe, komme nicht weiter" oder "Photoshop braucht Hilfe!" belegst Du nur, dass Du die Netiquette unseres Forums nicht gelesen oder verstanden hast, oder es Dir an der notwendigen Reife für ein solches Informationsmedium fehlt. Beiträge mit mangelhaften Betreff-Zeilen werden ohne Vorwarnung gelöscht und der Account (ggf. erst bei einer Wiederholungstat) unbefristet gesperrt.

Ich bin mir nicht sicher wie man mein Problem konkretisieren könnte, da ich mich wie gesagt kaum mit Python oder Regulären Ausdrücken auskenne. Sorry:(
 
natürlich ist mein Umschalttaste nicht kaputt :suspekt:...Es ist ehr Gewohnheit :(, aber ich werde mir in Zukunft Mühe geben.
Genau ich meine den Link, aber ich glaube entweder verrutsche ich andauernd beim gucken um ein paar Zeilen oder du, oder evtl. liegt es auch am Browser. :confused:
Ja, hab selber grad gesehen, das die Zeilennummern völlig unnütz sind - zumindest im IE.
Die Zeilen die ich meine:

( r'(?s)<math>(.*?)' , r'\\begin{equation}' ),
( r'(?s)</math>(.*?)' , r'\\end{equation}' ),
diese waren auskommentiert, bei meinem Testlauf.
Ja, gut. OK.
Mein Problem fängt mit der Funktion/Methode: def doWiki(text): (dies sollte sich dann bei dir in Zeile 533 befinden, oder?)
Ja, davor steht 533...
In welcher FOrm könnte ich das Ganze umprogrammieren? Was hast du für eine Idee?
Man könnte ja vorher den <math>...</math> Abschnitt enkodieren, so das dieser nicht mehr von den anderen Ersetzungen betroffen ist.

Nach der Übersetzung müßtest du die entsprechenden Stellen wiederfinden und dekodieren.

Gruß
 
Was heißt den encodieren'? Hab das noch nie gehört.:eek:

Vielleicht könnte man ja eine Variable an der Stelle einfügen, geht das in Python? Weil dann könnte man die Inhalte der jeweils richtigen Variable zuweisen:

vom Prinzip:
while text=<math>
count++ (irgendeine Zahl die hochzählt bei jedem Schleifendurchgang)
array(count)= text
do

Könnte man sowas in Python umsetzten und wie könnte ich an die Stelle im Text eine variable ersetzten?

Oder hast du eine andere Idee?
 
Was mir gerade noch für eine Idee kommt: könnte man sagen, dass wenn <math> kommt, das Programm ein anderes Wörterbuch aufruft?
Das wär doch eigentlich eine ziemlich simple und leicht umzusetzende Idee, oder was meinst du?
 
Zurück