ich habe eine txt-Datei der Form:
Code: Alles auswählen
<gruppe name="A">
Feld1
Feld2
...
</gruppe>
<gruppe name="B">
...
</gruppe>
etc.
ABER: mein regex klappt einfach nicht und ich weiß nicht warum:
Code: Alles auswählen
re_gruppe=re.compile(r'<(gruppe) name="(.*?)>(?:\r?\n?([a-zA-Z \-]+))+\r?\n?</gruppe>',re.I|re.S)
s=re_gruppe.search(txt)
btw: ich habe ein kleines REGEX-Testprog geschrieben ... ihr könnt es ja mal auf Fehler überprüfen, danach würde ich es mit in die Codesnippets setzen .... (Achtung funktioniert mit WxPython)
Code: Alles auswählen
import wx,re
class app(wx.App):
def OnInit(self):
frame = myframe(None)
self.SetTopWindow(frame)
frame.Show(True)
return True
class myframe(wx.Frame):
def __init__(self,parent):
wx.Frame.__init__(self,parent,-1,'Mein Regex-Tester',(-1,-1),(900,700))
panel=mypanel(self)
class mypanel(wx.Panel):
def __init__(self,parent):
wx.Panel.__init__(self, parent, -1)
tregex=wx.StaticText(self,-1,"REGEX-Befehl")
self.regex= wx.TextCtrl(self, -1,"",size=(600, -1))
tinp=wx.StaticText(self,-1,"auszuwertender Text:")
self.inp = wx.TextCtrl(self, -1,"",size=(600, 300), style=wx.TE_MULTILINE)
toutp = wx.StaticText(self,-1,"Ausgabe:")
self.outp = wx.TextCtrl(self, -1,"",size=(600, 300), style=wx.TE_MULTILINE)
bt= wx.Button(self, -1, "compile & search")
self.Bind(wx.EVT_BUTTON, self.work, bt)
space=4
self.ig = wx.CheckBox(self, -1, "IGNORECASE (I)")
self.lo = wx.CheckBox(self, -1, "LOCALE (L)")
self.mu = wx.CheckBox(self, -1, "MULTILINE (M)")
self.do = wx.CheckBox(self, -1, "DOTALL (S)")
self.un = wx.CheckBox(self, -1, "UNICODE (U)")
self.ve = wx.CheckBox(self, -1, "VERBOSE (X)")
sizercheck = wx.FlexGridSizer(cols=1, hgap=space, vgap=space)
sizercheck.AddMany([self.ig,self.lo,self.mu,self.do,self.un,self.ve])
sizer = wx.FlexGridSizer(cols=3, hgap=space, vgap=space)
sizer.AddMany([ tregex, self.regex,bt,
tinp, self.inp,sizercheck,
toutp, self.outp,(0,0)
])
border = wx.BoxSizer(wx.VERTICAL)
border.Add(sizer, 0, wx.ALL, 25)
self.SetSizer(border)
self.SetAutoLayout(True)
def work(self,event=None):
if not self.regex.GetValue() or not self.inp.GetValue():
dlg = wx.MessageDialog(self,'fehlerhafte Eingabe',
'MUAHAHAHAHA', wx.OK) # <-- ein wenig Spass wird ja wohl erlaubt sein ;-)
dlg.ShowModal()
dlg.Destroy()
return
flags=0
if self.ig.IsChecked():
flags|=re.I
if self.lo.IsChecked():
flags|=re.L
if self.mu.IsChecked():
flags|=re.M
if self.do.IsChecked():
flags|=re.S
if self.un.IsChecked():
flags|=re.U
if self.ve.IsChecked():
flags|=re.X
print self.regex.GetValue().__repr__()
regex=re.compile(self.regex.GetValue())
s=regex.search(self.inp.GetValue())
if not s:
dlg = wx.MessageDialog(self,'kein Matches',
'MUAHAHAHAHA', wx.OK) # <-- ein wenig Spass wird ja wohl erlaubt sein ;-)
dlg.ShowModal()
dlg.Destroy()
return
self.outp.Clear()
for i in s.groups():
self.outp.AppendText(i+'\n#################\n')
if __name__=='__main__':
main=app()
main.MainLoop()