Toon posts:

[regex] repeterend blok uit getal

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil getallen omzetten naar breuken, als dat kan. Dat hangt er dus vanaf of er een repeterend patroon in het getal opduikt.

als voorbeelden:
0.3453333333333333
0.3333333333333333
0.1231231231231573
0.3457342502365349

de eerste heeft een repeterend patroon na wat begin gerommel wat ik wil hebben is ["345","3"], dus het beginstuk en het patroon
de tweede heeft geen begin stuk, dus wil ik ["","3"]
bij de derde zit er gerommel achteraan (komt door beperkte nauwkeurigheid), dat wil ik gewoon negeren, dus wat ik hier terug wil is ["","123"]
bij de vierde is geen repeterend patroon, dus alleen begin rommel: ["3457342502365349",""]

hoe nu de regex?
wat ik eigenlijk bedacht is het volgende:
code:
1
0\.(\d*?)(\d+?)*

- de eerste * non greedy, omdat ie anders het repeterende patroon ook opeet
- de eerste + ook non greedy, om dezelfde reden
- de tweede * wel greedy om er zoveel mogelijk te pakken

dit levert problemen op, namelijk
- met de + op non greedy pakt ie maar 1 getal, omdat de tweede * matched op repeterende digits, en niet steeds hetzelfde repeterende getal of groep getallen, wat ik dus wil
- de tweede * mag wel 0 keer matchen (geen repeterend blok), maar als ie 1 keer matched heb ik dus ook geen repetitie, maar alleen "begin rommel" (laatste voorbeeld). Alleen wordt het dus doorde tweede * gematched en niet door de eerste omdat de tweede greedy is en de eerste niet. Bij meer dan 1 keer matchen heb ik uiteraard een repetitie

rara, hoe los ik dit nu op?

edit: @hieronder: programming is ook goed, maar het is wel javascript, is dus van belang voor de nauwkeurigheid van getallen en ook niet alle regex modifiers werken.

[ Voor 5% gewijzigd door Verwijderd op 17-11-2006 15:34 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 20:36

crisp

Devver

Pixelated

zoiets lijkt me:
code:
1
/^0\.(\d+?)\\1+$/

Intentionally left blank