[python] reguläre ausdrücke


mondschein85

Mitglied
der : hat gefehlt :)

Und es kommt auch ein PDF raus, aber:

<special>%5Csqrt%7B%5Csum 0%5En%5C%2C%20a n%5E2%7D</special>

anstatt von:

\sqrt{\sum_0^n\, a_n^2} :(
 

mondschein85

Mitglied
Ach so ich hab ja ganz vergessen zu posten, was nun im Code steht:

def encodeMath(x):
return "<special>" + urllib.quote(x.group(1)) + "</special>"

def decodeMath(x):
return urllib.unquote(x.group(1))

DoWiki(text)

text = re.sub(r'(?s)<math>(.*?)</math>', encodeMath, text)
for trans_tuple in translate1:
# pat, debug
print "replacing " + trans_tuple[0]
text = re.sub(trans_tuple[0], trans_tuple[1], text)

print "done"

for trans_tuple in translate2:
# pat, debug
print "replacing " + trans_tuple[0]
text = re.sub(trans_tuple[0], trans_tuple[1], text)

print "done"

text = re.sub(r'(?s)<special>(.*?)</special>', decodeMath, text)
 

mondschein85

Mitglied
Das Problem hierbei ist nur:

Traceback (most recent call last):
File "extensions/wikipdf/src/wiki2latex.py", line 624, in ?
tex_code += doWiki(wiki_code)
File "extensions/wikipdf/src/wiki2latex.py", line 602, in doWiki
text =decodeMath(text)
File "extensions/wikipdf/src/wiki2latex.py", line 560, in decodeMath
return urllib.unquote(x.group(1))
AttributeError: 'str' object has no attribute 'group'

Und jetzt?
 

mondschein85

Mitglied
text = re.sub(r'(?s)<special>(.*?)</special>', decodeMath, text)

Also so scheint es zu gehen, ABER :( was mach ich in meiner Zurückübersetzungsmethode falsch?

def decodeMath(x):
return "\$" + urllib.unquote(x.group(1)) + "\$"

oder es könnte auch an text = re.sub(r'(?s)<special>(.*?)</special>', decodeMath, text) liegen...das er praktisch gar nicht erst bis zur Methode kommt, oder? Bin ratlos...:confused:
 

deepthroat

Erfahrenes Mitglied
  1. Bitte verwende für Code die entsprechenden Code Tags [python]...[/python] usw. Das ganze ist sonst äußerst unleserlich.
  2. Du kannst einen Beitrag auch noch nachträglich bearbeiten.
Was ist denn translate2 ?

Wenn etwas im Code steht wird es auch ausgeführt. Gibt es denn Fehlermeldungen oder wird es einfach nicht zurückübersetzt?

Gruß
 

mondschein85

Mitglied
Tut mir leid, aber ich war so aufgeregt, dass wir voran kommen. Sitze schon seid Anfang der Woche dran und war echt schon am durch drehen.

Also momentan sieht's so aus:
Code:
	text =  re.sub(r'(?s)$<$special$>$(.*?)$<$/special$>$', decodeMath, text)
$<$special$>$, weil in der translate() < mit $<$ und > mit $>$ übersetzt werden.

Habe den Text vor der Anweisung und nach der Anweisung ausgeben lassen:

dies ist ein test bla blubb

$<$special$>$\%5Csqrt\%7B\%5Csum\_0\%5En\%5C\%2C\%20a\_n\%5E2\%7D$<$/special$>$
immer noch
^
dies ist ein test bla blubb
$<$special$>$\%5Csqrt\%7B\%5Csum\_0\%5En\%5C\%2C\%20a\_n\%5E2\%7D$<$/special$>$
immer noch
--> das einzige was sich verändert hat ist das ^ unter dem immer noch, aber es kann auch sein, dass das Zeichen einen Fehler aufzeigt, oder so, aber ich kenn mich halt gar nciht aus (ich weiß nur das bei dem Fehler von vorhin das Zeichen ja auch an der Stelle war, wo der Fehler aufgetaucht ist).

Was meinst du?

Also er wandelt alles super um, nur leider nicht zurück irgendwie :( ?

Noch ne andere Frage urllib codiert das auch "_" Zeichen?
 

deepthroat

Erfahrenes Mitglied
Das $ ist ein Spezialzeichen, das mußt du in einem regulären Ausdruck entwerten.

Python:
text =  re.sub(r'(?s)\$<\$special\$>\$(.*?)\$<\$/special\$>\$', decodeMath, text)
Du könntest statt <special> </special> natürlich auch irgendwas anderes verwenden um den Bereich zu markieren.

Der _ wird nicht kodiert durch urllib.quote. Dann nimm mal base64.encodestring und base64.decodestring. Da ist dann nichts weiter drin als Buchstaben und ein Gleichheitszeichen.

Gruß

PS: Warum verwendest du denn nicht die python Code Tags?!
 

mondschein85

Mitglied
Also anstatt
Code:
return "<special>" + urllib.quote(x.group(1)) + "</special>"
einfach das
Code:
	return "<special>" + base64.encodestring(x.group(1)) + "</special>"
weil dann kommt dieser Fehler
Traceback (most recent call last):
File "extensions/wikipdf/src/wiki2latex.py", line 637, in ?
tex_code += doWiki(wiki_code)
File "extensions/wikipdf/src/wiki2latex.py", line 581, in doWiki
text = re.sub(r'(?s)<math>(.*?)</math>', encodeMath, text)
File "/usr/lib/python2.3/sre.py", line 143, in sub
return _compile(pattern, 0).sub(repl, string, count)
File "extensions/wikipdf/src/wiki2latex.py", line 490, in encodeMath
return "<special>" +base64.encodestring(x.group(1)) + "</special>"
NameError: global name 'base64' is not defined
 

Neue Beiträge