Avatar billede brian0905 Nybegynder
01. december 2005 - 13:23 Der er 11 kommentarer og
1 løsning

Regular Expressions, virker ikke helt

Hej Eksperter,

Jeg har denne metode, den skal lave nogle søg og erstat i en html streng, således jeg får den formatteret til xml. Men min søg og erstat metode virker ikke helt. Hvis jeg erstattet disse søgepatterns med noget mere simpelt (uden <> tegn) så virker det fint... hvad går der galt?

private string ExecuteRegExSearchReplace(string originalstring)
        {
            log.LogEntry("");
            log.LogEntry("--Regular expression S/R--");
            string newstring = string.Empty;
            string[,] replacearray = new string[,]
            {
                {"<p><span class=\"Normal\">(.+?)</span></p>", "<chapter>$1</chapter>"},
                {"<ul>", "<list>"},
                {"</ul>", "</list>"},
                {"<li><span class=\"List\">(.+?)</span></li>", "<item>$1</item>"},
                {"<h1>(.+?)</h1>", "<heading1>$1</heading1>"},
                {"<h2>(.+?)</h2>", "<heading2>$1</heading2>"},
                {"<h3>(.+?)</h3>", "<heading3>$1</heading3>"},
                {"<h4>(.+?)</h4>", "<heading4>$1</heading4>"},
                {"<h5>(.+?)</h5>", "<heading5>$1</heading5>"}
            };
            for(int i=0;i<replacearray.Length/2;i++)
            {
                log.LogEntry("["+replacearray[i,0]+"] --> ["+replacearray[i,1]+"]");
                newstring = Regex.Replace(originalstring, replacearray[i,0], replacearray[i,1]);
            }
            log.LogEntry("--End Regular expression S/R--");
            log.LogEntry("");
            return newstring;
        }
Avatar billede roenving Novice
01. december 2005 - 13:33 #1
Du bruger jo hele tiden original-strengen, så det er vel når du kun bruger en, det virker !-)

                originalstring = Regex.Replace(originalstring, replacearray[i,0], replacearray[i,1]);

            return originalstring;
Avatar billede brian0905 Nybegynder
01. december 2005 - 13:45 #2
Dooh.. selvfølgeligt :-)
Giv lige et svar
Avatar billede brian0905 Nybegynder
01. december 2005 - 13:49 #3
Hmm.. andet problem opstået: mine linier er adskilt af linieskift, det kan mit regex ikke helt finde ud af: mit dokument ser således ud:

<p>
  <span class="Normal">bla bla</span>
</p>

det kan mit regex ikke klare, altså linieskiftet, hvordan får jeg mit regex til at ignorere dette linieskift? se ovenstående for det regex jeg bruger til at matche med
Avatar billede roenving Novice
01. december 2005 - 13:52 #4
Nu har jeg ikke lige et c#-editeringsværktøj åbent, men har du ikke mulighed for at sætte options på Replace-metoden ?-)
Avatar billede the_party_dog Nybegynder
01. december 2005 - 14:00 #5
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconRegularExpressionOptions.asp

Der kan man ihvertfald sætte at det er multiline....

Regex Test = new Regex("PATTERN", RegexOption.Multiline)
Avatar billede brian0905 Nybegynder
01. december 2005 - 14:00 #6
jepsen, nu tror jeg jeg fangede den, den har en option der hedder "Singleline" hvor den opfatter hele strengen som een lang string, i stedet for en række linier adskilt af \n
Avatar billede roenving Novice
01. december 2005 - 14:03 #7
Så velbekomme '-)

-- men behold selv de fleste af dine point !-)
Avatar billede roenving Novice
01. december 2005 - 14:03 #8
;O)
Avatar billede the_party_dog Nybegynder
01. december 2005 - 14:04 #9
Virker det med $1 til at få det ud som der står i dine ()??

Jeg har prøvet på at lave en RegEx, som fandt noget bestemt, men kunne ikke få den til kun at give mig det som stod i mine ().

Nogen der hurtigt kan fortælle mig det?
Avatar billede brian0905 Nybegynder
01. december 2005 - 14:17 #10
Du skal bruge $ og så et nummer til at referere til dine grupper. Dvs:

abc(.+?)defghi(.+?)jklm(.+?)nop

der kan du referere til dine grupper (dine paranteser) ved at referere dem ved et $ og så et fortløbende nummer 1-indekseret.

zzz$1xxx$2yyy$3
Avatar billede the_party_dog Nybegynder
01. december 2005 - 14:20 #11
okay.. Det vil jeg prøve. Mange tak! :)
Avatar billede roenving Novice
01. december 2005 - 14:47 #12
-- og jeg takker for point ;~}
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