Avatar billede skjoldby Nybegynder
10. april 2002 - 12:05 Der er 11 kommentarer og
1 løsning

RegExp og tal

Jeg skal have lagt to tal sammen som er fundet via et RegExp. Men det virker ikke. Gør jeg noget forkert?

' Nedenstående skal udregne 1469 + 2
myStr = "1469:35/2:11"

Set RegX = New RegExp
RegX.Global = True
RegX.IgnoreCase = True
RegX.Pattern = "(\d+):(\d\d)/(\d+):(\d\d)"

' har prøvet følgende
Response.Write RegX.Replace(myStr, "$1+$3")
Response.Write RegX.Replace(myStr, cint("$1")+cint("$3"))
Response.Write RegX.Replace(myStr, clng("$1")+clng("$3"))

myStr er selvfølgelig en del af en større tekststreng, men for at gøre det overskueligt har jeg kun brugt "1469:35/2:11" i eksemplet.

Kan nogen hjælpe eller blot bekræfte at det ikke kan lade sig gøre?
Avatar billede skjoldby Nybegynder
10. april 2002 - 12:06 #1
Har i øvrigt også prøvet:
Response.Write RegX.Replace(myStr, "$1"+"$3")
Avatar billede invisibleman Nybegynder
10. april 2002 - 12:07 #2
Fordi "$1" er en streng .. og "$3" også er .. du må hive dem ud, lægge sammen og replace.
Avatar billede skjoldby Nybegynder
10. april 2002 - 12:09 #3
Hvordan hvie dem ud?
Avatar billede invisibleman Nybegynder
10. april 2002 - 12:13 #4
Set Matches = Rx.Execute(myStr)

Så indeholder Matches() de submatches der måtte være ...

Men! .. (d+) .. det betyder ikke digit .. det gør:

[\d]+ *måske* .. kan ikke helt huske om MS' RegExp bruger \d .. men ellers er [0-9]+ fin.
Avatar billede skjoldby Nybegynder
10. april 2002 - 12:36 #5
Er ikke helt med endnu. Er det noget ala det her du vil:

Set Matches = RegX.Execute(myStr)

For Each objMatch in Matches
  ' ... et eller andet
Next
Avatar billede invisibleman Nybegynder
10. april 2002 - 12:43 #6
Matches(1) og Matches(3) vil indeholde dine 2 tal
Avatar billede skjoldby Nybegynder
10. april 2002 - 12:56 #7
Det gør den altså ikke
Response.Write Matches(0) ' giver 1469:35/2:11

Matches(1) og Matches(3) findes ikke.
Avatar billede skjoldby Nybegynder
10. april 2002 - 12:57 #8
Skal lige siges at du selvfølgelig har ret med mit pattern. Det skulle have været:

RegX.Pattern = "(\d+):(\d\d)/(\d+):(\d\d)"
Avatar billede skjoldby Nybegynder
10. april 2002 - 13:25 #9
Fandt ud af hvordan jeg fik mine to tal frem:

For Each objMatch in RegX.Execute(myStr)
    Response.Write objMatch.SubMatches(0)
    Response.Write objMatch.SubMatches(2)
Next
Avatar billede skjoldby Nybegynder
10. april 2002 - 13:47 #10
Så lykkedes det:

For Each objMatch in RegX.Execute(myStr)
  int1 = cInt(objMatch.SubMatches(0))
  int2 = cInt(objMatch.SubMatches(2))
  Response.Write Replace(myStr, objMatch.value, int1+int2)
Next
Avatar billede skjoldby Nybegynder
10. april 2002 - 13:48 #11
Du ledte mig på sporet af svaret så læg et svar ind så får du point.
Avatar billede skjoldby Nybegynder
02. august 2002 - 14:14 #12
jeg lukker så.
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

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