Portál AbcLinuxu, 31. října 2025 22:02
 11.11.2009 19:25
Martin Stiborský             | skóre: 26
             | blog: Stibiho bláboly
             | Opava
        11.11.2009 19:25
Martin Stiborský             | skóre: 26
             | blog: Stibiho bláboly
             | Opava
        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:
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.
[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.
             12.11.2009 23:02
Přemek Vyhnal             | skóre: 24
             | blog: Toto není blog!
             | Dobřichovice
        12.11.2009 23:02
Přemek Vyhnal             | skóre: 24
             | blog: Toto není blog!
             | Dobřichovice
        m/(::\s*)?([^:]*)((::\s*)?(.*))?/a bude to v $2, prip. druhy v $5
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.