Windows: Versionsinformationen von EXE-Dateien einlesen???
Hi. Auch \x01 ist ein beliebiges Zeichen und wird durch den Punkt "." repräsentiert und soll beliebig oft vorkommen. Aus der Docu:
Außerdem ist ein Punkt kein "\n". Das heißt, er sucht bei dir maximal eine Zeile raus, mehr nicht.*?, +?, ??
The "*", "+", and "?" qualifiers are all greedy; they match as much text as possible. Sometimes this behaviour isn't desired; if the RE <.*> is matched against '<H1>title</H1>', it will match the entire string, and not just '<H1>'. Adding "?" after the qualifier makes it perform the match in non-greedy or minimal fashion; as few characters as possible will be matched. Using .*? in the previous expression will match only '<H1>'.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das macht es jetzt ein wenige klarer... Somit macht es eigentlich immer Sinn ein "?" zu benutzen...
Nun gut, re.findall( InfoStr+"(.+?)\x01", RAWdata ) klappt nun auch, es ist sogar besser als die "([^\x01]+)" Variante...
Denn ich hab festgestellt, das in seltenen Fällen es leider doch kein \x01 gibt:
z.b.: für folgende Windows-Dateien:
C:\windows\twain.dll - (Twain-Source-Manager)
C:\windows\AppPatch\AcLayers.dll - (Windows Compatibility DLL)
mit der Such mittels "(.+?)\x01" fällt twain.dll schon mal raus... Bei der anderen Datei kommen allerdings fehlerhafte Ergebnisse zurück
Nun gut, re.findall( InfoStr+"(.+?)\x01", RAWdata ) klappt nun auch, es ist sogar besser als die "([^\x01]+)" Variante...
Denn ich hab festgestellt, das in seltenen Fällen es leider doch kein \x01 gibt:
z.b.: für folgende Windows-Dateien:
C:\windows\twain.dll - (Twain-Source-Manager)
C:\windows\AppPatch\AcLayers.dll - (Windows Compatibility DLL)
mit der Such mittels "(.+?)\x01" fällt twain.dll schon mal raus... Bei der anderen Datei kommen allerdings fehlerhafte Ergebnisse zurück
Hi. Das würde ich nicht so sehen, denn wie gesagt, sobald ein "\n" vorkommt, versagt deine Variante, wenn du nicht im DOT-ALL modus bist (Da ist der "." auch ein "\n"). Mach lieber das:
Code: Alles auswählen
muster=re.compile(InfoStr+"([^\x01]+)\x01")
#oder bei dir (trotzdem net so gut, non-greedy):
#muster=re.compile(InfoStr+"(.+?)\x01",re.DOTALL)
muster.findall( RAWdata )
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Da hast du eigentlich recht... Allerdings zeigt sich jedoch, das "(.+?)\x01" besser klappt... Zumindest habe ich bisher nichts gegenteilige feststellen können...Milan hat geschrieben:sobald ein "\n" vorkommt, versagt deine Variante
Doch ich würde es ehr vorziehen A-Za-z0-9 usw. zu nehmen, also wirklich nur Zeichen die vorkommen dürfen, allerdings funktioniert es leider nicht... Es kommen nie Treffer zu stande bei:
re.findall( InfoStr+"([a-zA-Z0-9_]+)\x01", RAWdata )
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
noch nen versuch:
re.findall(InfoStr+"([a-zA-Z0-9_\x00]+)\x01", RAWdata)
oder
re.findall(InfoStr+"([\w\x00]+)\x01", RAWdata)
eventuell, falls auch Leerzeichen und Linefeeds vorkommen
re.findall(InfoStr+"([\w\x00\x20\r\n]+)\x01", RAWdata)
Gruß
Dookie
PS.: jetzt weiss ich woher das \0x01 kam, mit 0x01 wird in Python eine Hexadezimalzahl direkt im Code geschrieben.
re.findall(InfoStr+"([a-zA-Z0-9_\x00]+)\x01", RAWdata)
oder
re.findall(InfoStr+"([\w\x00]+)\x01", RAWdata)
eventuell, falls auch Leerzeichen und Linefeeds vorkommen
re.findall(InfoStr+"([\w\x00\x20\r\n]+)\x01", RAWdata)
Gruß
Dookie
PS.: jetzt weiss ich woher das \0x01 kam, mit 0x01 wird in Python eine Hexadezimalzahl direkt im Code geschrieben.
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Alle drei Varianten funktionieren leider nicht... es wird nie etwas gefunden...
Hab das Listing, mit Beispielanwendung mal hier gepostet:
http://python.sandtner.org/viewtopic.php?p=12561
Hab das Listing, mit Beispielanwendung mal hier gepostet:
http://python.sandtner.org/viewtopic.php?p=12561