Avatar billede beef12 Nybegynder
14. november 2004 - 00:53 Der er 6 kommentarer og
1 løsning

ekstrahere tekst ud af en streng

Hvis jeg har følgende streng-eksempel:

stat("yyy","xxx")

Hvor stat er statisk tekst imens yyy og xxx er vilkårlige strenge som kan optræde...

Hvis jeg gerne vil gemme xxx i en ny variabel - hvordan gør jeg så det?

Jeg kan ikke anvende Replace, da xxx og yyy kan være hvad som helst... og indeholde et virkårligt antal af tegn.

Jeg gætter på at den nemmeste måde at få det xxx ud på er ved at på en eller anden måde tælle antallet af ", og når man møder den tredje ", så skal man ekstrahere teksten indtil man møder den fjerde ".
Avatar billede erikjacobsen Ekspert
14. november 2004 - 09:17 #1
Hvis jeg har forstået dig korrekt, kan du lege lidt med dette eksempel. Udtræk
af strenge kan normalt altid laves med regulære udtryk.



using System;
using System.Text.RegularExpressions;

public class test {

  public static void Main(string[] args) {
    String str="etellerandet(\"hejsa\",\"med dig\")";
    String pattern="^.*?\\(\".*?\",\"(.*?)\"\\)$";
    Console.WriteLine(str);
    Console.WriteLine(pattern);
 
    Regex r=new Regex(pattern);
    Match m = r.Match(str);
    if (m.Success) {
      Console.WriteLine("Vi har en match");
      Console.WriteLine("Delmatch: "+m.Groups[1].Value);
    } else {
      Console.WriteLine("Vi har ikke en match");
    }
  }

}
Avatar billede arne_v Ekspert
14. november 2004 - 12:49 #2
En variant af Eriks kode:

using System;
using System.Text.RegularExpressions;

public class Test {
    public static void Parse(string s)
    {
        MatchCollection res = Regex.Matches(s,"(?:stat\\(\")([^\"]*)(?:\",\")([^\"]*)(?:\"\\);)");
        for(int i = 0; i < res.Count; i++) {
            Console.WriteLine("stat " + res[i].Groups[1] + " " + res[i].Groups[2]);
        }
    }
    public static void Main(string[] args) {
        string s = "// yyy xxx\r\n" +
                  "stat(\"yyy\",\"xxx\");\r\n" +
                  "// aaa bbb\r\n" +
                  "stat(\"aaa\",\"bbb\");\r\n";
        Console.WriteLine(s);
        Parse(s);
    }
}

output:

// yyy xxx
stat("yyy","xxx");
// aaa bbb
stat("aaa","bbb");

stat yyy xxx
stat aaa bbb
Avatar billede beef12 Nybegynder
14. november 2004 - 12:53 #3
og hvis jeg kun ønsker at se xxx eller bbb, hvordan gør jeg så?
kan jeg evt ændre Console.Writeline(s); til noget i denne retning:
Console.Writeline({3});
Avatar billede arne_v Ekspert
14. november 2004 - 13:02 #4
Med min kode er

res[0].Groups[1] = "yyy"
res[0].Groups[2] = "xxx"
res[1].Groups[1] = "aaa"
res[1].Groups[2] = "bbb"

så du kan fiske det ud du vil.
Avatar billede beef12 Nybegynder
14. november 2004 - 14:53 #5
jo - det virkede...
kan i ikke begge smide et svar?
Avatar billede arne_v Ekspert
14. november 2004 - 14:57 #6
jeg vil godt
Avatar billede erikjacobsen Ekspert
14. november 2004 - 15:00 #7
Ellers tak, jeg samler slet ikke på 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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Ingeniør til Satellitkommunikation

Netcompany A/S

Network Engineer

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Teamleder til AL Sydbanks GDPR & Tech Regulation i Aabenraa