Regex - Selecteer alles na een karakter mocht deze bestaan

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Yariva
  • Registratie: November 2012
  • Laatst online: 23:51

Yariva

Moderator Internet & Netwerken

Power to the people!

Topicstarter
Mijn vraag
Ik probeer een bestaande string op te splitsen in 2 aparte strings, enkel wanneer de string ook de karakter bevat ( ; ). Mocht het karakter niet aanwezig zijn in de string wil ik de gehele string matchen.

Een voorbeeld van de string:
  • BLADIEBLA;Dit is het 2de deel
  • Dit is een string zonder de punt comma
Wat ik al gevonden of geprobeerd heb
Omgekeerd heb ik het nu werkend:
^(.+?)(?=;|$)
Waarbij enkel het eerste deel van de string word gematched tot aan ;.

Nu nog andersom :P Heeft iemand hier een ingeving?

Mensen zijn gelijk, maar sommige zijn gelijker dan andere | Humans need not apply

Beste antwoord (via Yariva op 04-07-2019 12:36)


  • Orion84
  • Registratie: April 2002
  • Laatst online: 13:57

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Voutloos schreef op donderdag 4 juli 2019 @ 12:04:
[...]

Dit is een eenvoudig idee, een serie karakters zonder de separator. Alleen wil je de anchor op einde ipv begin string, wat goed op te zoeken moet zijn.
Je bedoelt iets als:
code:
1
([^;]+)$


Dat werkt ook, maar is veel minder efficiënt dan wat ik in Orion84 in "Regex - Selecteer alles na een karakter mocht deze bestaan" post.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr

Alle reacties


Acties:
  • 0 Henk 'm!

  • Arie-
  • Registratie: December 2008
  • Niet online
In welke taal probeer je dit op te lossen? Is het niet makkelijker om :
  1. te kijken of 't teken in de tekst zit
  2. de tekst te splitsen op 't teken
  3. het tweede element van het resultaat te pakken.

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 13:57

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Dat is toch simpelweg:
code:
1
^([^;]+)

Zie: https://regex101.com/r/5336s1/1

Of begrijp ik je nu helemaal verkeerd? Je geeft eigenlijk helemaal niet duidelijk aan wat je nu precies wilt matchen als er wel een ; in zit :?

[ Voor 46% gewijzigd door Orion84 op 04-07-2019 11:59 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Erkel
  • Registratie: Mei 2006
  • Laatst online: 02-10 19:40
Afhankelijk van de programmeertaal die je gebruikt is er meestal wel een functie die je een split laat doen op een bepaald teken.

C2D E6600 - 2048MB Kingston - Sapphire HD2900XT - 200Gb Samsung - Asus P5B-E


Acties:
  • 0 Henk 'm!

  • Yariva
  • Registratie: November 2012
  • Laatst online: 23:51

Yariva

Moderator Internet & Netwerken

Power to the people!

Topicstarter
Arie- schreef op donderdag 4 juli 2019 @ 11:57:
In welke taal probeer je dit op te lossen? Is het niet makkelijker om :
  1. te kijken of 't teken in de tekst zit
  2. de tekst te splitsen op 't teken
  3. het tweede element van het resultaat te pakken.
Het is niet echt een taal, met Python etc had dit idd erg gemakkelijk geweest.
De reden hiervoor is dat ik in een monitoring pakket een bestaande waarde die binnenkomt met SNMP wil splitten. Helaas ben ik hierdoor afhankelijk van de tools die het monitoring pakket levert, waaronder Regex.

Mensen zijn gelijk, maar sommige zijn gelijker dan andere | Humans need not apply


Acties:
  • 0 Henk 'm!

  • Yariva
  • Registratie: November 2012
  • Laatst online: 23:51

Yariva

Moderator Internet & Netwerken

Power to the people!

Topicstarter
Orion84 schreef op donderdag 4 juli 2019 @ 11:58:
Dat is toch simpelweg:
code:
1
^([^;]+)

Zie: https://regex101.com/r/5336s1/1

Of begrijp ik je nu helemaal verkeerd? Je geeft eigenlijk helemaal niet duidelijk aan wat je nu precies wilt matchen als er wel een ; in zit :?
Die is een stuk netter dan wat ik nu heb. Echter probeer ik alles na de ; te matchen, dit is ervoor :)

Mensen zijn gelijk, maar sommige zijn gelijker dan andere | Humans need not apply


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Orion84 schreef op donderdag 4 juli 2019 @ 11:58:
Dat is toch simpelweg:
code:
1
^([^;]+)
Bijna ;) je mist de splitsing.
code:
1
^([^;]+)(?:;(.*))?$

[ Voor 24% gewijzigd door DJMaze op 04-07-2019 12:06 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Yariva schreef op donderdag 4 juli 2019 @ 12:00:
[...]


Die is een stuk netter dan wat ik nu heb. Echter probeer ik alles na de ; te matchen, dit is ervoor :)
Dit is een eenvoudig idee, een serie karakters zonder de separator. Alleen wil je de anchor op einde ipv begin string, wat goed op te zoeken moet zijn.

En de regex hierboven doet veel te moeilijk. ;)

[ Voor 3% gewijzigd door Voutloos op 04-07-2019 12:05 ]

{signature}


Acties:
  • +1 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 13:57

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Yariva schreef op donderdag 4 juli 2019 @ 12:00:
[...]


Die is een stuk netter dan wat ik nu heb. Echter probeer ik alles na de ; te matchen, dit is ervoor :)
Right, ok: https://regex101.com/r/5336s1/2
code:
1
(?:[^;]+;(.*))|^([^;]+)

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • BernardV
  • Registratie: December 2003
  • Laatst online: 21:40
https://regexr.com/4gu4j
code:
1
^([^;]+);?(.*?)$

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Voutloos schreef op donderdag 4 juli 2019 @ 12:04:
Dit is een eenvoudig idee, een serie karakters zonder de separator. Alleen wil je de anchor op einde ipv begin string, wat goed op te zoeken moet zijn.

En de regex hierboven doet veel te moeilijk. ;)
En wat nou als de string "waarde1;waarde2;waarde3" is? TS vraagt immers om een eerste split ;)

Maak je niet druk, dat doet de compressor maar


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 13:57

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Voutloos schreef op donderdag 4 juli 2019 @ 12:04:
[...]

Dit is een eenvoudig idee, een serie karakters zonder de separator. Alleen wil je de anchor op einde ipv begin string, wat goed op te zoeken moet zijn.
Je bedoelt iets als:
code:
1
([^;]+)$


Dat werkt ook, maar is veel minder efficiënt dan wat ik in Orion84 in "Regex - Selecteer alles na een karakter mocht deze bestaan" post.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
DJMaze schreef op donderdag 4 juli 2019 @ 12:08:
[...]

En wat nou als de string "waarde1;waarde2;waarde3" is? TS vraagt immers om een eerste split ;)
Fair enough. Alhoewel het niet 100% waterdicht in topicstart staat wat er met meerdere ‘;’ moet gebeuren.😇

{signature}


Acties:
  • 0 Henk 'm!

  • Yariva
  • Registratie: November 2012
  • Laatst online: 23:51

Yariva

Moderator Internet & Netwerken

Power to the people!

Topicstarter
Voutloos schreef op donderdag 4 juli 2019 @ 12:12:
[...]
Fair enough. Alhoewel het niet 100% waterdicht in topicstart staat wat er met meerdere ‘;’ moet gebeuren.😇
Ik zal het even vermelden in de TS. In dit scenario hoeft enkel de eerste ; te worden gematched. Alles hierna hoort bij de 2de string.

Mensen zijn gelijk, maar sommige zijn gelijker dan andere | Humans need not apply


Acties:
  • 0 Henk 'm!

  • biomass
  • Registratie: Augustus 2004
  • Laatst online: 19:32
code:
1
^(.*)[;].*$|(^.*;{0}.*)


M'n ingeving? "Now you have two problems" :9

Acties:
  • 0 Henk 'm!

  • Yariva
  • Registratie: November 2012
  • Laatst online: 23:51

Yariva

Moderator Internet & Netwerken

Power to the people!

Topicstarter
Thanks, ik ga verder met de oplossing die Orion heeft voorgesteld. Dank allen voor de reacties!

Mensen zijn gelijk, maar sommige zijn gelijker dan andere | Humans need not apply


Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 13:57

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Yariva schreef op donderdag 4 juli 2019 @ 12:42:
Thanks, ik ga verder met de oplossing die Orion heeft voorgesteld. Dank allen voor de reacties!
Welke? De korte inefficiënte die ik noem in de post die je als beste antwoord hebt gemarkeerd, of de langere, efficiëntere regex in mijn eerdere post (waar ik in dat "beste antwoord" naar refereer)?

The problem with common sense is that it's not all that common. | LinkedIn | Flickr

Pagina: 1