Just nu i M3-nätverket
Gå till innehåll

RegularExpression hjälp


christoffer.e

Rekommendera Poster

christoffer.e

Hallå alla.

Jag har ett litet problem som är lite jobbigt om man inte kan regexp :) (Tror dock det är relativt enkelt om man kan det)

 

Jag har en herrans massa text. I det stora textsjoket vill jag göra en replace. Jag vill leta efter ordet IMP[ och ersätta det med AQ[iMP[

Så långt inga större problem, det kan man ju göra med en vanlig replace. Kruxet är att när jag har hittat IMP[ så vill jag efter nästkommande ] lägga till en extra ]

 

Så tex:

IMP[kallekula] ska bli: AQ[iMP[kallekula]]

 

Problemet blir ju alltså att där det står kalleula ovan kan det stå vad som helst. Därför antar jag att man måste lösa det med regexp för att få in den extra ].

 

Är det någon som har några idéer till hur det kan se ut? Eller vart man kan hitta mer info?

 

Tackar!

 

Länk till kommentar
Dela på andra webbplatser

Det är väldigt lätt att göra med nästan varje regexp-motor fast exakt hur man gör replace varierar lite från språk till språk så det skulle underlätta om du berättar om du ska göra det i javascript, perl, java eller något annat.

 

Länk till kommentar
Dela på andra webbplatser

christoffer.e

Ah så klart.

Det görs mha VBScript.RegExp

 

Ber om ursäkt för den bristfälliga informationen i mitt första inlägg. Jag får skylla på att jag fortfarande är inställd på new york-tid :)

 

Länk till kommentar
Dela på andra webbplatser

Jag har exakt noll koll på VBScript så någon annan får sköta syntaxen men det du vill göra är nåt i stil med följande:

 

"(IMP\[[^]]*\])"

 

och sen vill du göra en ny sträng på formen AQ[$1].

 

Edit: Förklaring av uttrycket:

Hitta grupperingar som innehåller IMP[ följt av hur många tecken som helst ända tills det kommer en ']' ], denna grupp heter sen 1 och det är den vi stoppar in i den nya strängen AQ[$1].

[inlägget ändrat 2008-10-28 10:34:29 av fhe]

Länk till kommentar
Dela på andra webbplatser

christoffer.e

Halloj! Ledsen att svaret dröjt, var tvungen att sticka på möte och sedan dra ner i gymet för att få bort lite överskottsenergi .)

 

Din lösning fungerar som en klocka iaf! :thumbsup:

 

Tack så mkt för hjälpen. Vet att jag sagt det förut, men nu säger jag det igen och menar det verkligen denna gång; Jag ska lära mig regexp!

Riktigt kraftfullt när man får snurr på det där.

 

Tack igen!

 

Länk till kommentar
Dela på andra webbplatser

Jag är ingen bra lärare, jag har haft det i verktygslådan för länge utan att behöva förklara :-)

 

Hursomhelst upptäckte jag att jag förenklat förklaringen lite ovan...

Jag skrev:

följt av hur många tecken som helst ända tills det kommer en ']'

som förklaring till den här delen:

[^]]*

 

Det är alltså en avancerad form av .* (som betyder hur många av vad som helst), * betyder hur många som helst (eller ingen). I det här fallet så har jag en [] framför med lite tecken på insidan. Om man skriver t.ex [AB]* så betyder det "ta allt så länge det bara är bokstäverna A och B". När jag skriver [^]]* så skulle man kunna tro att det betyder alla tak-tecken och slutklamrar men taket betyder "inte" i sammanhanget. Så det står alltså ta allt så länge det inte är en slutklammer.

 

Förmodligen är konstruktionen onödig, det kunde förmodligen lika gärna stått

(IMP\[.*\]) eftersom det ju ändå kommer en sluthake som nästa tecken (och då blir det ju samma sak att matcha allt fram till nästa ']'). Jag vet inte om den ena är att föredra ur ett prestandaperspektiv, det bara blev så när jag skrev det :-)

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...