24. marts 2003 - 10:13Der er
7 kommentarer og 1 løsning
Erstatte "AND"/"OR" i streng
Jeg har følgende streng:
"Søren AND Peter" AND "Ole OR Niels"
Jeg skal bruges en regexp der kan erstatte "AND" i sætningen "Søren AND Peter", men ikke det "AND", som står mellem "Søren AND Peter" og "Ole OR Niels"
dvs. den skal kun slette "AND" i de dele af strengen, som omgrænset af (").
Ved lidt ændring skulle den også gerne kunne virke, så den kan erstatte "OR" i "Ole OR Niels".
Det skal være muligt at restatte flere forekomster i samme streng.
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
Det tog lidt længere tid end jeg først havde forventet, desværre nok fordi det er ASP. Funktionerne omkring regulære udtryk i ASP har et antal besværlige begrænsninger hvoraf de vigtigste er: Med Execute kan man ikke bruge paranteser til at opsamle del-strenge fra den matchede streng, dette kan man godt med Replace, men til gengæld gælder Global ikke i Replace. Jeg har valgt en 2-skridt løsning, hvor jeg først finder alle delstrenge omsluttet af ", derefter erstatter jeg AND i hver af disse med hvad der nu måtte ønskes. Det ser således ud:
Function ReplaceWithinQuotes( str, toreplace, replacement ) Dim result Dim regEx ' Create variables. dim Matches dim NextIndex dim quoteStr
Set regEx = New RegExp ' Create regular expression. regEx.Pattern = """[^""]*""" ' Set pattern. regEx.IgnoreCase = True ' Make case insensitive. regEx.Global = True result = "" count = 1 Set Matches = regEx.Execute(str)
if Matches.Count = 0 then result = str else NextIndex = 1 For Each Match in Matches result = result & mid(str, NextIndex, Match.FirstIndex-NextIndex+1) quoteStr = Match.Value
result = result & Replace( quoteStr, toreplace, replacement ) NextIndex = Match.FirstIndex + Len(quoteStr) + 1 Next result = result & mid(str, NextIndex) end if
ReplaceWithinQuotes = result End Function
Den kaldes fx således:
str = "plihi AND plaha""Søren AND Peter"" AND ""Ole OR Niels"" AND ""bla AND BLI""blaha AND blaha" result = ReplaceWithinQuotes( str, "AND", "noget" )
Det betyder: 1 stk gåseøjne efterfulgt af 0 eller flere 'ikke-gåseøjne' efterfulgt af 1 stk gåseøjne.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.