Portál AbcLinuxu, 8. května 2025 22:51
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ě.
Řešení dotazu:
místo \w
dát [^~|=]
[^~|=]+
znamená vem jeden nebo víc znaků, které nejsou ~
, ani =
, tj. jakékoli "slovo" bez těch dvouch znaků
(\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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.