[REGEXP] getallen uit text halen

Pagina: 1
Acties:

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 19:44

TrailBlazer

Karnemelk FTW

Topicstarter
Ik heb een lap text met een daarin telkens getallen van 4 cijfers. Niet meer en niet minder hoe kan ik eenvoudig die getallen eruit krijgen.
Ik krijg wel die dubbele punt erachter alleen hoe flikker ik de rest weg.
s/(\d{4})/$1:/g;

de taal is perl natuurlijk

Verwijderd

s/[^\d{4}]//g;

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 19:44

TrailBlazer

Karnemelk FTW

Topicstarter
ok ik filter nu wel mooi de troep eruit. Ik krijg echter nu een lange string met getallen hoe kan ik nu makkelijk achter elke 4 cijfers een : krijgen.
p.s. en kan je ff at uitleg geven waarom die rechte haken

  • El Martino
  • Registratie: December 2000
  • Laatst online: 04-08 10:37

El Martino

Zo niet, dan toch.

De rechte haken gebruikt hij om aan te geven dat alles wat binnen die haken NIET (het ^ teken) voldoet aan \d{4} vervangen moet worden door // (niets dus). Verander de regexp in s/[^\d{4}]/:/g; dan moet ie 't doen.

"To make a bad day worse, spend it wishing for the impossible", Calvin (Calvin & Hobbes)


Verwijderd

plak het er achter of doe dit ofzo...

s/(.*)(\d{4})(.*)/$2:/g;

kan vast wel slimmer maar ben niet zo handig met regexp ...

haken zijn verzameling en ^ is niet...
dus [^\d{4}] gooit alles weg wat niet een openvolging is van 4 digits

dus s/[^0-9]//g; werkt ook wel om alles wat niet een cijfer is eruit te gooien

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 19:44

TrailBlazer

Karnemelk FTW

Topicstarter
Op maandag 13 mei 2002 15:08 schreef El Martino het volgende:
De rechte haken gebruikt hij om aan te geven dat alles wat binnen die haken NIET (het ^ teken) voldoet aan \d{4} vervangen moet worden door // (niets dus). Verander de regexp in s/[^\d{4}]/:/g; dan moet ie 't doen.
als ik dat doe krijg ik een heboel : maar dat kan ik ook wel weer afvangen denk

  • El Martino
  • Registratie: December 2000
  • Laatst online: 04-08 10:37

El Martino

Zo niet, dan toch.

Mmmm... Inderdaad. Zijn alle getallen in je lap tekst getallen van 4 cijfers, of komen er ook losse cijfers of getallen van 2 en 3 cijfers in voor?

"To make a bad day worse, spend it wishing for the impossible", Calvin (Calvin & Hobbes)


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 19:44

TrailBlazer

Karnemelk FTW

Topicstarter
het bestaat enkel uit getallen van vier cijfers

  • El Martino
  • Registratie: December 2000
  • Laatst online: 04-08 10:37

El Martino

Zo niet, dan toch.

Dan is het enige wat je hoeft te doen alle niet-cijfers weg te halen en die vervangen door dubbele punten.

s/[^\d]*/:/g;

"To make a bad day worse, spend it wishing for the impossible", Calvin (Calvin & Hobbes)


  • Grum
  • Registratie: Juni 2001
  • Niet online
doe ff een partij moeilijk zeg .. tjeez :)


4 cijfers = \d{4}
4 cijfers replacen met nix is: s/\d{4}//g
4 cijfers in een var hebben: /(\d{4})/ en dan $1 voor je getal.

tada!

  • El Martino
  • Registratie: December 2000
  • Laatst online: 04-08 10:37

El Martino

Zo niet, dan toch.

Uhhm ja, dat wisten we dus al lang...

"To make a bad day worse, spend it wishing for the impossible", Calvin (Calvin & Hobbes)


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Conceptueel vind ik dit wel mooi:
code:
1
  join(':', ($invoer =~ /\d{4}/g) );

't Is niet de meest efficiente methode, maar wel helder.

Als alle series van getallen 4 lang zijn, kun je alle series van niet-getallen vervangen door ':', zoals al gesuggeerd is. Vervolgens moet je nog de ':' aan het begin en eind van je string weghalen. Dit zal wel een van de meest efficiente oplossingen zijn.

Als je iets met de getallen wilt doen, heb je natuurlijk aan /d{4}/g genoeg, aangezien 't me niet zo handig lijkt om eerst te joinen en dan weer te splitten. Dat is uit je vraagstelling niet helemaal duidelijk.
Pagina: 1