[Regular expressions]Groepen in bepaald formaat.

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 22:46
Ik ben bezig met het parsen van een bepaald stuk tekst met behulp van regular expressions. In deze tekst staat data die ik nodig heb, gescheiden door spaties (in dit voorbeeld 5 kolommen, het zijn er eigenlijk meer):
code:
1
2
 100      2 2/3          4     AFA 
  80      4,025   12           AFA

Ik wilde nu met de volgende regex de data extracten (de kolombreedtes kloppen niet helemaal, het gaat om het idee):
code:
1
([\d ]{5})([\d ,/]{12})([\d ]{8})([\d ]{5})([\w ]{5})

Ik maak nu dus als het ware 5 groepen, die ik in Java kan benaderen. Dit werkt prima, alleen nu is het zo dat die groepen ook nog aan een bepaald formaat moeten voldoen. (Bijvoorbeeld alleen cijfers, of alleen letters). Hoe kan ik dit combineren? Kan wat ik wil eigenlijk wel in een regular expression?

Roomba E5 te koop


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Gewoon ranges gebruiken? [a-z]? [0-9]?

'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.


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 22:46
Ik snap niet helemaal wat je bedoelt? [0-9] is toch hetzelfde als \d?
Misschien kan ik het nog wat verder verduidelijken:

Neem bijvoorbeeld de eerste kolom, deze is 5 karakters breed. Hier zou het volgende in kunnen staan (x = spatie):
code:
1
2
3
4
5
x100x
xx12x
xxx8x
x4xxx
xxxxx
Maar nooit:
code:
1
2
3
x8xx9
8xxx7
etc

Anders gezeg: de eerste kolom bestaat uit 0-5 spaties, gevolgd door 0-5 cijfers, gevolgd door nog wat spaties, en de hele kolom is altijd 5 karakters breed.
De expressie [\d ]{5} accepteert nu ook incorrecte input, en ik heb geen idee hoe ik bovenstaande verder kan dichttimmeren.

Roomba E5 te koop


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Eerst splitsen in kolommen en dan pas per kolom de gewenste data eruit peuteren is denk ik makkelijker.

Verwijderd

Eerst de kolommen splitsen. Je weet hoe breed ze zijn, dus dat moet geen probleem zijn.
Vervolgens matchen op bijvoorbeeld:
code:
1
\s*\d+\s*