Regular expression vraag

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • autje
  • Registratie: Januari 2009
  • Laatst online: 21:49
Ik ben op zoek naar een juiste regular expression voor het volgende probleem, maar ik niet zo'n regex-goeroe helaas. Maar die zijn hier vast wel.

Ik heb een string die bestaat uit vier velden. Die vier velden zijn gescheiden door underscores en een streepje. Het eerste veld mag tussen de 5 en 7 posities lang zijn. Het tweede veld tussen 1 en 13. Het derde veld moet 3 lang zijn. Het vierde veld moet 4 lang zijn.

Voorbeelden:
12345_1234567890123-123_12
1234567_1234-123_12

Nu heb ik de volgende expressie:
([0-9]{5,7})_([0-9]{1,13})-([0-9]{3})_([0-9]{2})

Dit werkt grotendeels, maar matcht (in ieder geval hier) ook als het eerste veld langer is dan 7 en/of het laatste veld langer dan 2.

Deze komen er dus ook door (terwijl dat niet de bedoeling is:
12345678_1234567890123-123_12
12345_1234567890123-123_123

Hoe dwing ik af dat hij daar niet op matcht? Het probleem is dat ik niet met totale stringlengte kan werken, omdat de eerste twee velden variabel in lengte zijn.

Beste antwoord (via autje op 25-08-2021 16:50)


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@autje ik denk dat het probleem zit dat je de niet matched op de start en end van de string. Nu kan hij dus ook midden in je string matchen, en je eerste sequence en laatste sequence kunnen daarom ook langer zijn.

code:
1
^([0-9]{5,7})_([0-9]{1,13})-([0-9]{3})_([0-9]{2})$

Zal beter werken

Het is een beetje afhankelijk van de regex engine of hij een full match wil of dat partial matches ook mogelijk zijn.

https://docs.microsoft.co...inning%20of%20each%20line.

[ Voor 35% gewijzigd door Woy op 25-08-2021 16:31 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Alle reacties


Acties:
  • +1 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:11
autje schreef op woensdag 25 augustus 2021 @ 16:16:
Het vierde veld moet 4 lang zijn.
Geen van je voorbeelden voldoet hier toch aan?

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 23:13
CurlyMo schreef op woensdag 25 augustus 2021 @ 16:21:
[...]

Geen van je voorbeelden voldoet hier toch aan?
regex zegt ook 3

https://regexr.com/64dsg

je kan de haakjes gewoon weg halen

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:11
Het is alleen wel handig als bedrijfsregels voldoen.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 23:13
CurlyMo schreef op woensdag 25 augustus 2021 @ 16:22:
[...]

Het is alleen wel handig als bedrijfsregels voldoen.
*lama*

[ Voor 25% gewijzigd door 418O2 op 25-08-2021 16:23 ]


Acties:
  • Beste antwoord
  • +4 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
@autje ik denk dat het probleem zit dat je de niet matched op de start en end van de string. Nu kan hij dus ook midden in je string matchen, en je eerste sequence en laatste sequence kunnen daarom ook langer zijn.

code:
1
^([0-9]{5,7})_([0-9]{1,13})-([0-9]{3})_([0-9]{2})$

Zal beter werken

Het is een beetje afhankelijk van de regex engine of hij een full match wil of dat partial matches ook mogelijk zijn.

https://docs.microsoft.co...inning%20of%20each%20line.

[ Voor 35% gewijzigd door Woy op 25-08-2021 16:31 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • +1 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 23:11
Ik vond het best een goed punt ;)

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • +2 Henk 'm!

  • TutanRamon
  • Registratie: Februari 2001
  • Laatst online: 02-10 10:00
https://regexr.com/64dtq

Kortere versie:
  • \d in plaats van [0-9]
  • ^ zodat eerste sequence niet langer is
  • $ zodat laatste sequence niet langer is
  • haakjes zijn niet nodig, tenzij je de groepen afzonderlijk wil hebben

[ Voor 85% gewijzigd door TutanRamon op 25-08-2021 16:53 ]

We see things as we are, not as they are


Acties:
  • 0 Henk 'm!

  • autje
  • Registratie: Januari 2009
  • Laatst online: 21:49
CurlyMo schreef op woensdag 25 augustus 2021 @ 16:21:
[...]

Geen van je voorbeelden voldoet hier toch aan?
Excuus, dat moest 2 posities lang zijn, niet 4.

Acties:
  • 0 Henk 'm!

  • autje
  • Registratie: Januari 2009
  • Laatst online: 21:49
@Woy en @TutanRamon , jullie beide versies werken. Thanks!

Weer wat geleerd, dus een succesvolle dag :).
Pagina: 1