Avatar billede roadrunr Nybegynder
24. marts 2003 - 10:13 Der 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.
Avatar billede jespernaur Nybegynder
24. marts 2003 - 18:19 #1
Hvilket sprog, perl, PHP, Javascript, ASP eller noget femte?
Avatar billede roadrunr Nybegynder
25. marts 2003 - 08:46 #2
ASP
Avatar billede roadrunr Nybegynder
25. marts 2003 - 12:29 #3
Havde du evt. en løsning?
Avatar billede jespernaur Nybegynder
25. marts 2003 - 21:58 #4
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" )


Mvh
Jesper Naur
Avatar billede roadrunr Nybegynder
26. marts 2003 - 08:25 #5
Det ser rigtig spændende ud. Jeg kigger lige på det og vender snart tilbage.
Avatar billede roadrunr Nybegynder
26. marts 2003 - 10:12 #6
Det virkede rigtig fint... tak for hjælpen
Avatar billede roadrunr Nybegynder
26. marts 2003 - 10:14 #7
Kan du evt. fortælle mig hvad følgende udtryk betyder: "[^"]*"
Avatar billede jespernaur Nybegynder
26. marts 2003 - 10:38 #8
Det betyder:
1 stk gåseøjne efterfulgt af 0 eller flere 'ikke-gåseøjne' efterfulgt af 1 stk gåseøjne.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester