[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