men nok om det.. vi ved ikke hvad spørger skal bruge.. min kode vil ikke virke i alle situationer heller, men ud fra det man så fra spørgers side er den fin nok.
Jeg tror hvis man skal gøre det helt rigtigt så det virker altid så skal man lave en regexp.
Ok nu havde jeg ikke lige testet arnes kode, men lad mig sige det på den her måde så, ideen i hans var korekt... og er jo også det du bruger i din sidste blah bla...
Tror nemlig formålet var at rive en del af in streng ud baseret på du strege og ikke bare fjerne de 2 strenge...
Men om ikke andet fik då så måske løst det... det var bare bedre end at dktekno fik noget som virkede så længe at Txt1 og Txt2 var i starten og enden af strengen... mens det måske ville gå galt i det øjeblik at de også var inde mindt i strengen... ;)
Nu har jeg brugt regex en del og det giver da nogle muligheder, i dette tilfælde syntes jeg egentlig måske det er lidt overkill... men naturligvis smag og behag...
Enyways... hvis du bruger BackReferences burde det blive lidt nemmere:
Regex reg = new Regex(string.Format("^.*{0}(<Capture>.*){1}.*$",TekstEt,TekstTo) return reg.Match(TekstTre).Groups["Capture"].Value;
Burde faktisk være nok.... hvis jeg husker korrekt...
Så kan man så få det der er indeholdt i paranteserne navngivet Capture mere eller mindre direkte, man skal derfor ikke til noget substring mm...
Men man skal passe på hvad man i det tilfælde gør og vide noget omkring Greedy og Non-Greedy Regex's... men jeg tror i det hele taget det er at komplecere opgaven mere end højest nødvendig...
med hensyn til hvad min kode returnerer så skrev jeg oppe i 17/03-2007 23:27:36 "i begge tilfælde antager jeg mellemrum som ikke skal med i resultat" - det har faktisk en betydning
prøv og test med:
"B", "E", "A B CD E F"
+1 og -2 skal undlades hvis de mellemrum ikke skal skrælles væk
var det så ikke bedre at trimme mellemrun efterfølgende? :P...
qawi >
med hensyn til " d","e","asdtttkkkkqeee"...
Så vil jeg antage at det skal være resultatløst og at det er meningen, for der vil jeg mene at så har man specifikt bedt den om af finde " d" og ikke "d"... derfor vil den returnere noget der indikere at den ikke kunne finde noget.
og i sidste ende vil Regex så give langt stører problemer... da man skal til netop at kontrolere for en masse skidt og bras i tekstEt og tekstTo inputtet...
\'s, .'er, *'er, mellemrum, $, ^ ect...
Så hvis opgaven er at finde streng X som er en streng der ligger imellem streng Y og Z, så vil jeg mene at det er langt vedre bare at gøre som arne v og dig... frem for regex... for så er der ikke en masse tegn der giver bøvl, og skriver man " noget"... så må man antage at det er vigtigt at der er mellemrum inden noget...
Men der står også: "Dvs. den udskriver det, der står mellem 2 andre strings."
Og det er der jeg kommer frem til at det man vil er at tage "start" og "slut" og "en streng med start som indeholder noget tekst før og med slut og indeholder noget efter"... og så pille " som indeholder noget tekst før og med " ud...
Det er min opfattelse af spørgsmålet. for ellers vil jeg tro han havde spurgt efter at få "Fjernet" noget istedet for af "pille noget ud"...
Undskyld, qawi, men efter nærmere eftertanke kan jeg ikke bruge din løsning alligevel.
Din metode virker ikke, hvis jeg f.eks. har en tekst, der hedder:
"blablabla:udskriv dette her;albalbalb"
Så vil jeg f.eks. gerne have udskrevet hvad der står mellem : og ;. Hvis jeg benytter mig af dit eksempel, så får jeg følgende som resultat:
"blablablaudskriv dette heralbablalb"
Og det skal det jo ikke være. Det skal være sådan, at den tager højde for, om der er andet tekst. Jeg har en lignende kode som virker fint for mig i Delphi:
function Indlaes(FromStr, ToStr, Str: String): String; begin if Pos(FromStr, Str) > 0 then Result := Copy(Str, Pos(FromStr, Str) + Length(FromStr), Pos(ToStr, Copy(Str, Pos(FromStr, Str) + Length(FromStr), Length(Str))) - 1) else Result := ''; end;
jo metoden virker fint.. du skal bare lige placere den korrekt for du har ikke placeret metoden et gyldigt sted ser det ud til.. måske under en forkert parantes!
Har nu ellers testet og fundet frem til det virkede :D... Men som arne siger, vær helt sikker på at det du compiler til er 2.0, det kan godt være du har hentet .NET 2.0 on installeret det mm. men hvis du i din Borland compiler til en .NET 1.1 så gør det ikke den store forskel...
Alternativt kan du som arne siger bare udskifte den med str.IndexOf( from ) >= 0, giver samme resultat... og så minder det jo også endnu mere om det delphi kode du har :P...
Det jeg postede er en modificering af det arne gav dig langt tidligere...
Den kan du evt. kopiere ind og kige på, og så udkommentere metoden og kaldene til den der heder MinFunktion20 til at starte med... den anden burde nemlig virke i .NET 1.1
Der giver de 2 første dig nogle grimme situationer.... følgende tegn har du udelukket som seperator tegn med det du har nu: [\^$.|?*+()
Ellers skal du først Escape dem... hvis du fx vil matche \ skal du bruge \\ (og i .NET kode "\\\\" resten er bare \[ \^ \$ \. ect. du kan læse mere her:
De sidste 2 linier er lidt noget bras når vi alligevel er i gang med regex når tingene kan gøres meget nemmere.
public static string BlaBlahMetoden(string TekstEt, string TekstTo, string TekstTre) { Regex reg = new Regex(string.Format("{0}(?'C'.*){1}",TekstEt,TekstTo)); return reg.Match( TekstTre ).Groups["C"].Value; }
Var også det jeg viste med Regex tidligere, men der var lige lidt syntax messige ting der manglede... ? inde i de paranteser der indeholder det vi gerne vil fange er rimelig essentiel ellers får man ikke noget Capture ud af det, og derfor det ikke har virket :P... om man så bruger '' eller <> til at navngive captured er ligemeget...
Synes godt om
Ny brugerNybegynder
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.