Python ja merkkijonosta etsiminen

Seuraa 
Viestejä45973
Liittynyt3.9.2015

Koitan luoda Pythonilla funktiota joka palauttaa ensimmäisen täsmäävän osuman kahden annetun merkkijonon välillä. Hakukriteerinä on siis toinen merkkijono. Tarkemmin sanottuna jos funktio saa merkkijonon "Mustan kissan paksut posket" ja hakukriteerinä on merkkijono: "ltjkyui" niin funktio palauttaisi arvon 1. Indeksi 1 on ensimmäinen täsmäävä merkki joka täsmää kahden merkkijonon kesken kun haku kohdistuu mustan kissan paksuihin poskiin.

Eräs kiero ympäristörajoite funktiolla on, se pitää toteuttaa yhdellä rivillä.
Sain tehtyä yhden kapistuksen lambda-funktioilla:
[size=85:1yn9zztv][code:1yn9zztv]eka_osuma = lambda sana, hakumerkit:sorted(filter(lambda x: x>-1,map(lambda x:sana.find(x),hakumerkit)))[:1][/code:1yn9zztv][/size:1yn9zztv]

Aika karmea kapistus mutta toimii, palauttaa tyhjän tai yksialkoisen taulukon jossa indeksiluku osumasta.

En ole ohjelmoija enkä liiemmälti perehtynyt säännöllisiin lausekkeisiin. Olisiko säännöllisillä lausekkeilla jotain kätevämpää tapaa toteuttaa funktio tai löytyykö Pythonista merkkijonojen käsittelystä jotain valmista?

Kommentit (11)

Saw
Seuraa 
Viestejä6251
Liittynyt20.6.2009

Ei taida valmista funktiota löytyä, säännöllisillä lausekkeilla onnistuu. Mutta lue toki docsit: http://docs.python.org/library/strings.html

Säännölliset lausekkeet: http://docs.python.org/library/re.html

Tietysti tämä sinun haluamasi toiminto voidaan väsätä vaikka miten monella tavalla. Onko jotkut koodaukset olympialaiset vai mitkä kun täytyy saada yhdelle riville koodi? Onhan taito sekin, mutta järin helposti aukeavaa tavaraa ei synny.

Young man, there's a place you can go.
I said, young man, when you're short on your dough.
You can stay there, and I'm sure you will find
Many ways to have a good time.

It's fun to stay at the Y.M.C.A.
It's fun to stay at the Y.M.C.A.

Heksu
Seuraa 
Viestejä5463
Liittynyt16.3.2005
Saw
Ei taida valmista funktiota löytyä, säännöllisillä lausekkeilla onnistuu.



Lienenkö ainoa, jonka mielestä kaikkia ohjelmointiteknisiä termejä ei pitäisi kääntää suomeksi "Säännöllinen lauseke" on toki eksakti käännös, muttei mielestäni välitä alkuunkaan samaa informaatiota kuin alkukielinen termi.

Saw
Seuraa 
Viestejä6251
Liittynyt20.6.2009

Kyllä se käännös kannattaa, mikäli vaan on on onnistunut. Esimerkiksi olio on aivan loistava käännös, koska object on paljon enemmän kuin objekti. Käännös on hyvä tehdä termeille, jotka itsessään siis eivät ole onnistuneita valintoja.

Young man, there's a place you can go.
I said, young man, when you're short on your dough.
You can stay there, and I'm sure you will find
Many ways to have a good time.

It's fun to stay at the Y.M.C.A.
It's fun to stay at the Y.M.C.A.

Heksu
Seuraa 
Viestejä5463
Liittynyt16.3.2005
mk_
Olen eri mieltä.



Tarkoitin, että sanakirjan mukaan "regular expression" voidaan toki kääntää sanakirjan mukaan "säännöllinen lauseke", mutta käännös ei mielestäni tällöin tarkoita sitä mitä alkukielisellä termillä tarkoitetaan. Suomen kieli ei taivu joka paikkaan, ehkä joku "säännönmukainen merkkijono/ilmaus" olisi kuvaavampi, joskaan ei kovin käyttökelpoinen käännös.

Saw
Kyllä se käännös kannattaa, mikäli vaan on on onnistunut. Esimerkiksi olio on aivan loistava käännös, koska object on paljon enemmän kuin objekti. Käännös on hyvä tehdä termeille, jotka itsessään siis eivät ole onnistuneita valintoja.



Itse pidän oliota hieman ontuvana käännöksenä, joskin menettelee vakiintuneena terminä ja käsitteenä. Omalla tavallaan suomen kielessä on oma viehätyksensä, enkä pidä suorista lainasanoista.

Kuka muuten tietää, mitä tietoteknistä käsitettä tarkoitetaan suomenkielisellä sanalla anne?

Saw
Seuraa 
Viestejä6251
Liittynyt20.6.2009

"Säännönmukainen merkkijono" olisi ihan ok ilmaus, mutta se poissulkisi sen että merkkijono sisältäisi suoritettavan lausekkeen. Lauseke on merkkijono, mutta siitä tulee voida katkoa osiota, joilla on suurempi merkitys kuin merkkiä merkin perään.

Heksu
Kuka muuten tietää, mitä tietoteknistä käsitettä tarkoitetaan suomenkielisellä sanalla anne?
Voiko tarkoittaa muuta kuin inputtia ja/tai argumettia?

Young man, there's a place you can go.
I said, young man, when you're short on your dough.
You can stay there, and I'm sure you will find
Many ways to have a good time.

It's fun to stay at the Y.M.C.A.
It's fun to stay at the Y.M.C.A.

Stratonovich
Seuraa 
Viestejä358
Liittynyt14.6.2009
Heksu
Saw
Ei taida valmista funktiota löytyä, säännöllisillä lausekkeilla onnistuu.



Lienenkö ainoa, jonka mielestä kaikkia ohjelmointiteknisiä termejä ei pitäisi kääntää suomeksi "Säännöllinen lauseke" on toki eksakti käännös, muttei mielestäni välitä alkuunkaan samaa informaatiota kuin alkukielinen termi.

Ihan hyvä suomennoshan tuo on. "Regular language" on suomeksi "säännöllinen kieli", tarkoittaen siis sitä tilakoneenakin (äärellisenä automaattina) esitettävissä olevaa kieltä. Ja tällä säännöllisellä kielellä tuotettu lauseke on tietysti "säännöllinen lauseke". Ihan niin kuin algebraa sisältävä lauseke on algebrallinen lauseke.

Vierailija
Heksu
Kuka muuten tietää, mitä tietoteknistä käsitettä tarkoitetaan suomenkielisellä sanalla anne?



Anne on luonnollisesti data, mikä muukaan se voisi olla. Hauska ehdotelma jostain 80-luvulta, muistaakseni.

Mutta mikä on tutkain (edelleen tietokonesanastoa)?

Heksu
Seuraa 
Viestejä5463
Liittynyt16.3.2005
Phony
Anne on luonnollisesti data, mikä muukaan se voisi olla.



Sehr gut. Ontuva käännös sekin - ainakin käsittääkseni latinan kielen data on monikko sanasta datum, "annettu". Niinpä data pitäisi olla esim. net annetut.

Mutta mikä on tutkain (edelleen tietokonesanastoa)?



Paha, paha! Lähinnä tulee mieleen joku debuggeri - tai näyttöpääte?

Vierailija

kun sinua varmaan kiinostaa miten rubyssa homma hoituu niin näin :

"hello".index(/[aeiou]/)

Eli "hello" jonosta etsiään hakasuluissa olevia merkkejä. Eka osuman indeksi palautetaan. Voi tietysti käyttää myös muuttujia.

Vierailija
Lyde
kun sinua varmaan kiinostaa miten rubyssa homma hoituu niin näin :

"hello".index(/[aeiou]/)

Eli "hello" jonosta etsiään hakasuluissa olevia merkkejä. Eka osuman indeksi palautetaan. Voi tietysti käyttää myös muuttujia.




Kiitos vinkistä. Ruby ei tosin ole käytössä. Pythonilla vastaava menee ilmeisesti näin:
m = re.search(r'[aeiou]',sana)
m.start()

Uusimmat

Suosituimmat