Avatar billede idiotbarn Nybegynder
15. august 2007 - 02:14 Der er 11 kommentarer og
1 løsning

Regex, fjerne en del af match

Jeg sidder med en utroligt sjusket wysiwyg editor, og har fx fået:

<IMG style="DISPLAY: block; WIDTH: 146px; HEIGHT: 122px" height=160 src="Billede_007(1).jpg" width=206 align=left>

Hvis der er Style, samt height og width i tagget, skal tallene findes. Er førnævnte fundet, skal height og width uden for style attributten fjernes.

Jeg kan godt lave min regex, så den fanger et mønster (fx style attributten med efterfølgende width). Mit problem er lidt. Hvis jeg fanger et match med noget ligende:

style=\"{0,1}.*WIDTH:\\s{0,2}(?<Wvalue>[0-9]+){1,}px

kan jeg få tallet ud på bredden, hvilket er fint.

Men hvad hvis jeg nu gerne vil fjerne WIDTH: 146px;, inden i style attributten med regex? De måder jeg har forsøgt mig med replace, fjerner hele match'en... Skal gerne virke som:
Hvis
  "Style="[EtEllerAndet]"WIDTH: [Tal]px;"
fjern WIDTH: [Tal]px;
Avatar billede nielle Nybegynder
15. august 2007 - 08:30 #1
Yikes, 2 gange height og 2 gange width!

Er du sikker på at det er dem _inde_ i style-attributten der skal fjernes? Det er ellers dem som overholder HTML/CMS standarderne, og ikke dem _udenfor_. Man har aldrigt måtte sætte height på det sted (selv om MS IE har ladet som ingenting og accepteret det alligevel).

Dukker der height og width op andre steder i din kode, eller er det kun i IMG-tags at de er der?
Avatar billede idiotbarn Nybegynder
15. august 2007 - 11:08 #2
Det er kun på image tag'et de er der to gange.
Koden skal bruges til et nyhedsbrev. Så vidt jeg ved er mailklienterne ikke så glade for css, men det kan selvfølgeligt godt ske det er fint med in-line css
Avatar billede nielle Nybegynder
15. august 2007 - 14:33 #3
Er du sikker på at det ikke er width'en udenfor style-taggen der skal fjernes?
Avatar billede nielle Nybegynder
23. august 2007 - 08:41 #4
Hvad med noget respons?
Avatar billede idiotbarn Nybegynder
23. august 2007 - 10:47 #5
Jeg er sådanset interesseret i hvordan man kan fjerne begge steder. Har flere gange siddet med ligende problem, hvor jeg gerne vil fjerne en del af et match.

Hvis jeg skal finde width inde i style tagget, skal jeg være sikker på det ikke er den anden jeg får fat i, og omvendt...
Avatar billede nielle Nybegynder
23. august 2007 - 17:34 #6
Tag et kig på denne her:

        private static void Test(string html)
        {
            Regex fjernWidthIndeniStyle = new Regex(@"(style=""[^""]*?)\s*width: \d+px;?", RegexOptions.IgnoreCase);

            string html1 = fjernWidthIndeniStyle.Replace(html, "$1");
            Console.WriteLine(html1);

            Regex fjernWidthUdenforStyle = new Regex(@"(style=""[^""]*"".*?)\s?width=\d+", RegexOptions.IgnoreCase);

            string html2 = fjernWidthUdenforStyle.Replace(html, "$1");
            Console.WriteLine(html2);
        }
Avatar billede idiotbarn Nybegynder
25. august 2007 - 16:41 #7
Det fungere jo egentligt fint, men der må være et sted jeg har sovet... hvad betyder "$1"?
Avatar billede nielle Nybegynder
25. august 2007 - 17:29 #8
Parenteserne i regexp'ens mønster definere en såkaldt "gruppe";

(style=""[^""]*?)\s*width: \d+px;?
^...............^

og markere noget som skal huskes og gemmes til Replace'ns 2. argument:

fjernWidthIndeniStyle.Replace(html, "$1")

Man kan have mere end en sådan gruppe, og den første får derfor navnet $1 og derefter er det $2, $3, osv.
Avatar billede idiotbarn Nybegynder
25. august 2007 - 19:12 #9
aah...troede man skulle bruge <> til at lave grupper...
Og gruppernes index starter fra 1?

Så lærte man noget nyt :D
Avatar billede nielle Nybegynder
25. august 2007 - 19:31 #10
<> bruges til at lave navngivne grupper, men der er der nu også et ()-par med:

(?<gemmes>style=""[^""]*?)\s*width: \d+px;?

hvorved man kan skrive

fjernWidthIndeniStyle.Replace(html, "${gemmes}")

så vidt jeg husker.
Avatar billede idiotbarn Nybegynder
25. august 2007 - 19:39 #11
Ah ok...
Ligger du et svar?
Avatar billede nielle Nybegynder
25. august 2007 - 19:40 #12
Svar :^)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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