Toon posts:

Hulp nodig met regular expressions

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Uit een lap tekst moet ik alle data tussen haakjes ( ) vervangen met niets.

Nu heb ik deze regular expression: "\(.*\)"
Alleen met deze vindt hij dus wel van begin tot eind de haakjes maar wanneer er meerdere haakjes in een zin staan slaat hij de haakjes tussen de eerste en laatste over.

bijvoorbeeld:
"ik (moet) een lap (tekst) verwijderen"
hij vindt nu dus:
"(moet) een lap (tekst)"
in plaats van
"(moet)" en "(tekst)"

Hoe kan ik dit oplossen?

Acties:
  • 0 Henk 'm!

Verwijderd

lama

[ Voor 91% gewijzigd door Verwijderd op 07-02-2010 22:35 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
zoek eens op greediness :)

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 17:07
Standaard matchen regulieren expressies zo lang mogelijke strings, vandaar dat in een tekst van de vorm "a(b)c(d)e" gematcht wordt op (b)c(d) en niet (zoals je waarschijnlijk wilde) op (b) of (c). Zoals zepaz al hintte, moet je dus je reguliere expressie zodanig aanpassen dat je tussen de haakjes géén andere haakjes matcht. Daar moet je zelf wel uit kunnen komen.

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 21-09 18:08

CoolGamer

What is it? Dragons?

Je zou dit op twee manieren kunnen doen. Je zou de * lazy kunnen maken. Dit kan door er een ? achter te zetten (dus ".*?"). Een andere mogelijkheid is om de . te vervangen door een character class die ) niet bevat: [^)].

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks heb em!
code:
1
\(.*?\)

werkt perfect!

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Nah, ik zou het liever zo doen:
code:
1
\([^\)]*+\)

of zonder newlines, dus misschien meer vergelijkbaar met wat je nu hebt:
code:
1
\([^\n\)]*+\)

De plus (possessive, dus zonder backtracking in dat stukje) kan niet in elk dialect.

Ungreedyness zal er eerder voor zorgen dat je problemen krijgt met backtracking als je de boel gaat uitbreiden. Daarnaast is bovenstaande sneller in sommige implementaties (zover dat relevant is). :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 21-09 12:22
pedorus schreef op zondag 07 februari 2010 @ 22:58:
Nah, ik zou het liever zo doen:
code:
1
\([^\)]*+\)

of zonder newlines, dus misschien meer vergelijkbaar met wat je nu hebt:
code:
1
\([^\n\)]*+\)

De plus (possessive, dus zonder backtracking in dat stukje) kan niet in elk dialect.

Ungreedyness zal er eerder voor zorgen dat je problemen krijgt met backtracking als je de boel gaat uitbreiden. Daarnaast is bovenstaande sneller in sommige implementaties (zover dat relevant is). :)
't is geen implementatie, het is een éénmalige search/replace. Dus schijt aan backtracking, als het werkt werkt het.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
De resterende vraag is of je geneste haakjes (zoals deze () ) hebt. Want dan replace je van de eerste ( tot de eerste ), niet van de eerste ( tot de laatste )

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1