Avatar billede supercitron Nybegynder
14. februar 2011 - 11:53 Der er 5 kommentarer og
1 løsning

skal replace alt efter 2nd match med regex.replace

jeg har en linje som ser således ud.

"blabla - blabla blabla - blabla blabla "

blabla kan være alt fra tal/bogstaver/tegn.
Det med fed skal blive tilbage. Det jeg matcher på er "-"
Der kan godt forekommer flere "-", men det er alt efter den anden "-" som skal slettes.

så efter en:

Result = regEx.Replace("blabla - blabla blabla - blabla blabla ", "")

får jeg "blabla - blabla blabla "

hvordan skal det pattern se ud?
Avatar billede tjp Mester
14. februar 2011 - 12:39 #1
regEx As New Regex("^([^ ]+ - [^ ]+ [^ ]+) - .*$")

Result = regEx.Replace("blabla - blabla blabla - blabla blabla ", "$1")
Avatar billede supercitron Nybegynder
14. februar 2011 - 13:05 #2
super mange tak.

Er det muligt at forklare hvad det hele gør?

Jeg kan ikke give dig points hvis du ikke har svaret men kun givet en kommentar :). så skrive lige et eller andet.
Avatar billede tjp Mester
14. februar 2011 - 13:30 #3
Tja, start '^' og slut '$' betyder at pattern skal matche hele inputtet, dvs her hele linjen; '[^ ]+' betyder et eller flere tegn som ikke er mellemrum; ' - ' betyder simpelthen bindestreng omgivet af mellemrum - hvis der kan være mere en ét mellemrum, skal det være ' +- +'; ' -.*' betyder mellemrum og bindestreg efterfulgt af hvadsomhelst pånær linjeskift; paranteserne gør at man kan referere til det omsluttede, hvilket bliver gjort med '$1' i Replace.
Avatar billede supercitron Nybegynder
14. februar 2011 - 13:51 #4
ok, men nu når jeg når længere ned i testen kan jeg se at der ikke tages højde for blabla - blabla - blabla - blabla....
Avatar billede tjp Mester
14. februar 2011 - 15:19 #5
Well, man får hvad man søger.. ;-)

Du kan evt. gøre 3. blabla valgfri:
"^([^ ]+ - [^ ]+( [^ ]+)?) - .*$"

eller måske er denne nok mere det du vil ha:
"^(.+? - .+?) - .*$"

'.+?' matcher ét eller flere tegn, men gør det pga '?' ikke-grådigt, dvs. den går videre ved første ' - '.
Avatar billede johny Nybegynder
14. februar 2011 - 15:41 #6
Nu ved jeg ikke præcis hvad du skal bruge det til, men .+ eller [^ ] medtager ALLE tegn (på nær mellemrum) i den sidste, og f.eks. ændringer i RegEx indstillinger, vil give forskellige resultater, som f.eks. om linebreak medtages.

Men umiddelbart ville jeg nok gå efter "^((?:(?:[^-]*)-){2})" så bliver den ved med at søge og capture præcis ind til og med den rammer den 2. "-".
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