Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ehdollinen säännöllinen lauseke (Python)

Sivun loppuun

Cartter [06.02.2013 19:10:07]

#

Terve,

Mulla on seuraavanlainen merkkijono: 'A/B/C/D/'

Mikä olisi säännöllinen lauseke, joka täsmää tuohon merkkijonoon kun vain jompikumpi B tahi D täsmää lopun lausekkeen kanssa? Siis 'A//C/D/' tai 'A/B/C//'.

Metabolix [06.02.2013 19:14:19]

#

No miten olisi lauseke "A//C/D/|A/B/C//"?

Cartter [06.02.2013 19:28:01]

#

Ei mitään muuta keinoa ole kuin tuo? Vaikuttaa hieman vaikealta, jos merkkijono ja ehdot olisi monimutkaisempia. Jos vaikka sanotaan, että jokaista kirjainta vastaisi oikean ohjelman oma pitkä säännöllinen lauseke.

The Alchemist [06.02.2013 19:46:20]

#

Kuulostaa taas vahvasti siltä, että yritetään tehdä asioita väärin.

Cartter [06.02.2013 19:55:01]

#

Jokaiselle kirjaimelle on oikeassa ohjelmassa oma säännöllinen lauseke, joka poimii kenoviivojen välistä jotain tarpeellista.

Jos säännölliset lausekkeet täsmää B:hen C:hen ja D:hen niin A:n säännöllinen lauseke ei saa täsmätä.

Jos säännölliset lausekkeet täsmää A:han C:hen ja D:hen niin B:n säännöllinen lauseke ei saa täsmätä.

jne...

Tuosta tulee helposti puoli näytöllistä säännöllistä lauseketta kun yhdistän kaiken?

Niin ja todennäköisesti tässä nyt yritetään jotain erittäin väärää :D

Grez [06.02.2013 19:57:03]

#

No eikö siihen voisi tehdä erilliset lausekkeet A:lle, B:lle, C:lle ja D:lle ja sitten ohjelmassa katsoa mitkä mätsäsi ja oliko tulos hyväksyttävä?

Cartter [06.02.2013 20:04:19]

#

Kyllä voi. Etsin vain sitä "oikeaa" tapaa tehdä tuo.

Metabolix [06.02.2013 20:31:23]

#

Pythonissa on mahdollista kirjoittaa myös näin: 'A/(B)?/C/(?(1)|(D))/'. Tässä rakenne (?(1)X|Y) vaatii lausekkeen X, jos sulkulauseke 1 on mukana, ja muuten lausekkeen Y. Ratkaisussa siis sulkulauseke 1 on B, lauseke X on tyhjä ja lauseke Y on (D). Tämän ratkaisun olisit ehkä löytänyt itsekin netistä (sanat: conditional regex).

Kuitenkin pidän yhtä hyvänä myös alkuperäistä ratkaisua, koska se on selvä ja toimii muillakin kielillä. Lausekkeen osat voi pitää muuttujissa, jolloin samaa lausekkeen osaa ei tarvitse koodissa toistaa. Jos pieni lyhennys on vielä välttämätön, sen voi kirjoittaa muotoon 'A/(B/C/|/C/D)/'.

Muista laittaa tarvittaessa lausekkeen alkuun ^ ja loppuun $.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta