Rechenfunktion mit RegEx
Hallo Freunde,
ich brauche eure Hilfe: Ich bearbeite mit dem Sigil-Editor ein epub mit ca. 3000 Fußnoten.
Die Fußnoten-Nummer muß ich umsetzen, dabei muß zur gefundenen Fußnote z.B. immer 47 addiert werden. Also aus 212 + 47 = 253.
Hier das vereinfachte Beispiel:
Suche: (<sup>)(\d+)(</sup>)
Ersetze: <a href="Anm.xhtml#\2+47"><sup id="n\2+47">[\2+47]</sup></a>
Ergebnis: <a href="Anm.xhtml#253"><sup id="n253">[253]</sup></a>
Mit RegEx ist das nicht möglich, allerdings bin ich im Netz auf die Option:
Function Mode for Search & Replace in the Editor des neuen internen Calibre-Editors gestoßen. Hier kann ein RegEx-Begriff durch eine Funktion erweitert werden unter Verwendung von Python.
Da ich nie mit Python programmiert habe und mit 72 Jahren warscheinlich auch nicht mehr die Zeit habe um es zu erlernen, bitte ich euch, mir bei der Lösung meines Problems zu helfen.
MfG Andreas
Die Lösung:
Simple math for Regex
The following Regex-Function will add 47 to any number between <sup> and </sup>. You can then use normal Regex to make any other changes that you desire.
In the Find box put "<sup>(\d+)</sup>" without the quotes.
In the Function box put "Add numbers" again without the quotes.
The code required for "Add numbers" is as follows:
import regex
from calibre import replace_entities
from calibre import prepare_string_for_xml
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):
return ('<sup>' + str(47 + int(match.group(1))) + '</sup>')
MfG
Andreas
Last edited by calibre-ak-4711; 03-17-2017 at 05:59 AM.
|