Portál AbcLinuxu, 14. května 2024 17:41


Dotaz: Python a regulární výraz

Martin Stiborský avatar 22.3.2009 14:52 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
Python a regulární výraz
Přečteno: 176×
Odpovědět | Admin

Dobrý den přeji.

Chtěl bych poprosit o pomoc s dokončením regulárního výrazu se kterým bojuju. Z toho textu:

~nazdar =ahoj svete =foo

Potřebuji vytáhnout vždy celý celý text za uvozujícím znakem (~ nebo =). Tedy re.findall by mi měl vrátit:

["~nazdar", "=ahoj svete", "=foo"]

Tento regexp:

(\W?[~|=]\w+)
Mi vytáhne vždy jenom jedno slovo, zbytek nechá (v případě "=ahoj svete" dostanu jenom "=ahoj"), jak ho tedy upravit abych dostal vše až po další ~ nebo =. Zkoušel jsem ty znaky přidat na konec regexpu, ale něco dělám špatně.

Kvík ..

Řešení dotazu:


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

Odpovědi

wamba avatar 22.3.2009 17:16 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Python a regulární výraz
Odpovědět | | Sbalit | Link | Blokovat | Admin

místo \w dát [^~|=]

This would have been so hard to fix when you don't know that there is in fact an easy fix.
Martin Stiborský avatar 22.3.2009 17:29 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
Rozbalit Rozbalit vše Re: Python a regulární výraz
Díky, funguje to perfektně. Myslel jsem si, že regexpům už teda trochu rozumím, ale tohle mi opět není jasné.
Mohl bych poprosit o vysvětlení ? ^ v [] znamená že na daném místě se ~ nebo = nesmí vyskytovat ne ? Nedochází mi to ..
Kvík ..
wamba avatar 22.3.2009 18:30 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Python a regulární výraz

[^~|=]+ znamená vem jeden nebo víc znaků, které nejsou ~, ani =, tj. jakékoli "slovo" bez těch dvouch znaků

This would have been so hard to fix when you don't know that there is in fact an easy fix.
22.3.2009 18:57 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Python a regulární výraz
Tohle (\W?[~|=]\w+) vám třeba rozhodně neveme "=ahoj svete", neboť si lze povšimnouti, že mezi ahoj a světě je mezera, kteroužto metaznak \w nepostihuje. Můžete zkusit třeba [\w\s]+, ale osobně častěji používám právě tu uvedenou negaci, tedy "vše až do znaku... který mne zajímá" např. =, ~, atd.
Martin Stiborský avatar 22.3.2009 19:11 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
Rozbalit Rozbalit vše Re: Python a regulární výraz
Jasně, chápu, že ta mezera byl ten problém. Nepřišel jsem na fígl s negací, teď už to vím.
Kvík ..

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.