Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Python Regex-Problem

  1. #1
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762

    Python Regex-Problem

    Ich habe viele LaTeX-Dateien in denen ich Bilder eingebunden habe. Im Laufe der Zeit sind wegen Bearbeitungen der Texte die Bilder teilweise aus den tex-Dateien verschwunden, existieren aber noch in meinem Bilderverzeichnis. Diese Verwaisten Bilder will ich mit einem Pythonscript aufspühren, was bis auf zwei Macken klappt.

    1. Prob: Ich habe ein Problem auskommentierte Zeilen zu behandeln
    2. Prob: Einträge die matchen müssten, tun es nicht.

    Beispiel was gematcht werden soll:
    Code:
    \includegraphics[scale=0.33]{Bilder/Legende}
    Verwendeter Regex-String:
    Code:
    "\\includegraphics.*"+image+"\}"
    image ist immer "Bilder/"+Dateiname ohne Endung, das setze ich in einer Schleife ein.
    Für obiges Beispiel wäre der Regex also
    Code:
    \\includegraphics.*Bilder/Legende\}
    Das ist soweit kein Problem, aber: Steht vor dem \includegraphics irgendwo, irgendwie ein "%" Zeichen, dann darf der Regex nicht matchen.
    Ich will vom Zeilenanfang beliebige Zeichen zulassen, dann muss ein % rausgematcht werden und dann können bis zum includegraphics wieder beliebige Zeichen kommen.
    Ich beginne den Regex dann mit
    Code:
    ^.*(?!%).*\\includegraphics....
    aber das klappt nicht, denn folgender Eintrag wird trotzdem gematcht:
    Code:
    %\includegraphics[scale=0.33]{Bilder/Legende}

    Zweites Prob:
    Code:
    \includegraphics[scale=0.90]{Bilder/Nadelspitze}
    wird nicht gematcht. Dabei sehen alle includes ausnahmslos so aus, z.B. steht
    Code:
    \includegraphics[scale=0.90]{Bilder/Jagdpfeil}
    direkt darüber und wird gematcht...
    I haven't lost my mind - It's somewhere on a backup-disc

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Ich habe das mal kurz versucht. Schau ob es funktioniert und stelle Fragen, zu teilen, die unklar sind. Der Trick dabei ist, dass ".*" soviel wie möglich an Zeichen isst, während man mit "[^{]*\{" sicher vor der geschweiften Klammer stoppt. Kommentarzeilen werden dadurch ausgelassen, indem verlangt wird, dass die Zeile entweder nicht mit einem '%' gefolgt von beliebigen Zeichen beginnt oder die Zeile mit einem Backslash anfängt.
    Code:
    #!/usr/bin/python
    import re, sys
    search = re.compile(r'^([^%].*\\|\\)includegraphics[^{]*\{(?P<image>[^}]+)\}')
    
    f = file(sys.argv[1], 'r')
    
    for line in f:
        m = search.match(line)
        if m:
            print m.groupdict()['image']
    
    f.close()
    Gruss, Andy
    Geändert von RapidMax (01-01-2006 um 15:56 Uhr)

  3. #3
    Registrierter Benutzer Avatar von SeeksTheMoon
    Registriert seit
    22.02.2002
    Beiträge
    762
    das findet keine Images, aber es gibt welche die gefunden werden müssen
    I haven't lost my mind - It's somewhere on a backup-disc

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •