[python] Regexpy a re.DOTALL

Pavel Kosina geon na post.cz
Úterý Září 4 12:06:12 CEST 2007


martin.stiborsky na gmail.com napsal(a):
> Zdravím.
> Tady (http://groups.google.com/group/cz.comp.lang.python/browse_thread/
> thread/4466880ab8c859c7?hl=cs) jsem s Vaší pomocí řešil, jak z
> textového zdroje dostat část textu uzavřenou mezi nějakými značkami.
> Teď to zkouším pomocí regexpů.
>   
.* - velmi žravé - zahrne do sebe toho co nejvíc, tedy od prvního 
:start: k poslednímu :end:
.*? -velmi  nežravé - zarhne do sebe co nejmín, od prvního :start: k 
nejbližšímu :end:


# -*- coding: cp1250 -*-

import re

retezec = """z tohoto radku budem regularem parsovat ... :start: toto 
chci, mam
to ? :end:
z tohoto radku nechci nic, nejsou tady start/end znacky, za ano  :)
na tenhle taky prdim, je tu tak maximalne pro okrasu
ale tady by se uz neco naslo :start: regexpy jsou fajn  :)  :end:
tady taky: :start: Regulary jsou fakt sranda :end:
FOO  :)

:start:
a tady to bude zajimave, zdrojak a text, zdrojak je pres nekolik
radku  :)

import os

def getDir(dir='/'):
  adresare = [x for x in os.listdir(dir) if os.path.isdir('%s%s' %
(dir,x))]
  print adresare

getDir()

to jsem zvedav jak ten regexp dokopu k tomu, aby fungoval, snad jo  :)
:end:

No a to by snad stacilo .. snad jen nakonec
:start: Predposledni radek, ten chci taky .... :end:
Konec."""

vzor = re.compile(r":start:(.*?):end:", re.DOTALL)


pocet=0
for vyskyt in re.finditer(vzor, retezec):
    print pocet,":", vyskyt.group(1)
    pocet=pocet+1

-- 
geon
Pavel Kosina



Další informace o konferenci Python