Autor Zpráva
Adam1999
Profil
Mám text "nápoj výborný 5L" a text "nápoj výborný 1L novinka". Potřeboval bych z toho dostat "nápoj výborný" a číslo, které je za L.
Vím, že bych měl asi použít Regex ale nevím jak jej napsat?
RastyAmateur
Profil
Adam1999:
Třeba takto
lionel messi
Profil
RastyAmateur:
Adam1999:
Třeba takto

Nechytí viacciferné ani desatinné číslo (nezáleží na tom, či s bodkou, alebo čiarkou) a ja si napríklad kupujem minerálku vo fľašiach s objemom 0,5 či 0,7 litra. :-)

^([^0-9]+)\s(\d+(?:,|\.)?.*)?L

V \1 bude názov nápoja, v \2 objem.

Pozor: Ak je súčasťou názvu číslo (napr. Limonáda 7UP 0,5L), nespráva sa spätná referencia podľa očakávania, doriešim neskôr, musím odísť od PC.
Adam1999
Profil
lionel messi:
Jj to je přesně ono. Dalo by se ještě dořešit aby šla vypsat i ta jednotka. Může to být třeba "Nápoj 5L" nebo "nápoj 500ML".
lionel messi
Profil
Finálna verzia

^(.+)\s(\d+(?:,|\.)?\d*)?((?:C|D|H|M)?L)

V \1 je názov nápoja (už chytí aj Limonáda 7UP), v \2 objem, v \3 jednotka objemu (centi-, deci-, hekto-, mililiter alebo prostý liter).

Nezáleží na tom, či bude objem 0,5L alebo 0.5L, chytí oba varianty.
RastyAmateur
Profil
lionel messi:
Chápu a uvědomuji si, jen jsem chtěl, aby se nad tím tazatel pak také trochu zamyslel a zkusil to doupravit do dokonalosti...

Jinak poslední, co bych ti tam doplnil je ^(?P<drink_name>.+)\s(\d......, a podobně, protože za měsíc už nebude vědět, co je v \1 a co v \3
Adam1999
Profil
lionel messi, RastyAmateur:
Chlapi díky moc! Dotáhl jsem to k obrazu svému takto:
^(?P<nazev>.+)\s(?P<obsah>\d+(?:,|\.)?\d*)?(?P<jednotka>(?:[C,c]|[D,d]|[H,h]|[M,m])?[L,l])
lionel messi
Profil
Adam1999:
lionel messi, RastyAmateur:
Chlapi díky moc! Dotáhl jsem to k obrazu svému takto:

Nie je za čo. Doplním, že dobrú službu by ti spravil aj modifikátor i za maskou (oddeľovačom), potom by si mohol odchytávanie jednotiek nechať v tej menej ukecanej forme, ako som ukázal ja (samozrejme, kľudne s pomenovanou skupinou).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0