[python] Regexpy a re.DOTALL

martin.stiborsky na gmail.com martin.stiborsky na gmail.com
Úterý Září 4 11:39:10 CEST 2007


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ů.
Pokud je celý zápis mezi start a end značkou na jednom řádku, je
všechno v pohodě a regexp funguje, pokud je ale text který chci
vypreparovat na více řádku a přidám do re.compile() flag re.DOTALL,
chová se dost podivně, asi to bude chtít jiný zápis, nevím ..

.py soubor:

# -*- coding: cp1250 -*-

import re

source = file('muj_regexp_pokus.txt' , 'r')
text = []
for line in source:
	text.append(line)

retezec = ''.join(text)

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


for vyskyt in re.finditer(vzor, retezec):
	print vyskyt.group(1)



.txt soubor:

toto je textovy soubor pro pokus s regexpem :) ( file:
muj_regexp_pokus.py)

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.



Další informace o konferenci Python