Portál AbcLinuxu, 19. dubna 2024 16:25


Dotaz: Rozdělení textu, pomoc s regulárním výrazem.

Martin Stiborský avatar 11.11.2009 19:25 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
Rozdělení textu, pomoc s regulárním výrazem.
Přečteno: 243×
Odpovědět | Admin

Ahoj.

Mám textový řetězec, ze kterého potřebuji vytáhnout jeho části podle určitého vzoru, bohužel je více možností, jak ten řetězec může vypadat.

Varianty jsou:

Druhá část tedy být může a nemusí, jistota je, že tam bude kus textu, který může a nemusí být uvozen tečkami.
No a já potřebuji získat odděleně ty dvě části, pokud jsou dvě, jinak vybrat jenom tu jednu.
Celé to provádím v Pythonu, je to součást Qt programu. Zkoušel jsem to přes split(). Split z Qt knihovny má fajn příznak "SkipEmptyParts", takže toto:

QtCore.QString(":: První část :: Druhá část").split("::", QtCore.QString.SkipEmptyParts)

 

Mi vrátí přesně ty dvě části. Takže kdybych vymyslel jak ošetřit výjimku ValueError při neexistenci druhé části při volání tohoto:

 

prvniCast, druhaCast = text.split("::", QtCore.QString.SkipEmptyParts)

 

Tak by se mi to líbilo :) Když druhá část neexistuje, potřeboval bych té proměnné přiřadit "None", to by bylo ideální.

No a nebo můžu použít regulární výraz, nevím který postup bude lepší. Mám tu jeden, který jsem před nějakou dobou asi stvořil, ale mám ho neokomentovaný, takže nemám šajn jak to funguje (no, možná zlehka tuším :) ) , jako obvykle když se trápím s regexpy.

 

re.compile(r"(?P<name>^::\w[^::]+)?(?P<text>.*)", re.UNICODE)

 

Jak by jste to řešili vy prosím ?

Děkuji za pomoc.

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

Odpovědi

11.11.2009 20:59 l4m4
Rozbalit Rozbalit vše Re: Rozdělení textu, pomoc s regulárním výrazem.
Odpovědět | | Sbalit | Link | Blokovat | Admin
[x for x in s.split('::') if x]
je senzam neprázdných částí.

Pak snad stačí append(None) nebo insert(0, None) (nepochopil jsem, kde chceš to None mít), je-li délka senzamu jen 1.
Přemek Vyhnal avatar 12.11.2009 23:02 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Rozbalit Rozbalit vše Re: Rozdělení textu, pomoc s regulárním výrazem.
Odpovědět | | Sbalit | Link | Blokovat | Admin
v pythonu nevim, ale match regexem treba nejak takhle?
m/(::\s*)?([^:]*)((::\s*)?(.*))?/
a bude to v $2, prip. druhy v $5
NO RAPTORS!

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.