Portál AbcLinuxu, 14. května 2024 07:30


Dotaz: regulární výraz s podmínkou (python)

20.2.2013 14:32 dik
regulární výraz s podmínkou (python)
Přečteno: 275×
Odpovědět | Admin
Ahoj, mám textový soubor a potřebuju vyextrahovat jmeno s rokem pro danou hlavičku. mezi hlavičkou a dalším řádkem s textem nikdy není mezera. Poradíte jak zadat do RE nejlépe pro python. Díky dik

some junk text some junk text

some junk text some junk text

textová hlavička jedna
karel 1997
jarda 1995
lenka 1978
zdenka 2000
karel 1990

some junk text some junk text
some junk text some junk text

some junk text some junk text
some junk text some junk text

textová hlavička dvě
laďa 1997
jarda 2000
karel 1978
zdenka 2001
mara 1977

some junk text some junk text
some junk text some junk text

some junk text some junk text

some junk text some junk text


textová hlavička tři
vít 1999
jarda 1995
lenka 1978
lenka 2000
karel 1990

some junk text some junk text
some junk text some junk text

some junk text some junk text

some junk text some junk text
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.2.2013 15:24 NN
Rozbalit Rozbalit vše Re: regulární výraz s podmínkou (python)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tu hlavicku chces taky ? Jaky ma format ? Nebo ti staci jen seznam jmen a cisel:
#!/usr/bin/python
import re

foo=open('foo.txt')

matches = re.findall('.+ \d+', foo.read())

for match in matches:
        print match
20.2.2013 15:45 dik
Rozbalit Rozbalit vše Re: regulární výraz s podmínkou (python)
Jojo hlavička je důležitá, defakto pro mě definuje určitou vlastnost, kterou pak aplikuji na získaný seznam jmeno, rok.

S výstupním formátem si už poradím, jen neumím zapsat RE ve tvaru "když najdu hlavičku tu a tu tak mi vrať třeba re.iter na následující dvojice jméno,rok třeba v re.match.dict" a musím si dát bacha na junk text. Snad jsem se vyjádřil srozumitelně :) Dík
20.2.2013 23:21 NN
Rozbalit Rozbalit vše Re: regulární výraz s podmínkou (python)
Dodavam, ze v pythonu se teprve ucim:
#!/usr/bin/python
import re

f = open('foo.txt')

for line in f:
        if  re.match('.*hlavi.*',line):
                print line
                while True:
                        n = f.next()
                        if re.match('.* \d+',n):
                                print n
                        else:
                                break
22.2.2013 14:07 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: regulární výraz s podmínkou (python)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj,

vyzkoušej tento regex, který zachytí celý požadovaný blok textu do jedné skupiny. Jednotlivé položky pak získáš třeba pomocí metody split().
regex = re.compile(r"(.*?\n(?:\w+ \d+\n)+)", re.U|re.M)

for m in regex.finditer(string):
    print m.group(0)
    print m.groups()

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.