Dirk M.: RegularExrepssions

Hallo allerseits,

RegularExpressions.. leider mein ewiges Leiden ;(

Ich moechte aus einer Textdatei alle Values eines besteimmten
Elementes auslesen. Also wie folgt:
<element [...] key="value1" [..] >
<element [...] key="value2" [..] >
usw..

Die Liste sollte nachher beeinhalten:
value1,value2 usw..

Kann mir einer von euch evtl. ein wenig dabei weiterhelfen?

Besten Dank euch allen!

Gruesse
Dirk M.

  1. Hello out there!

    <element [...] key="value1" [..] >
    <element [...] key="value2" [..] >

    Zwischen '<element' und 'key' dürfen also beliebige Zeichen stehen außer '>':
      <element[^>]+key

    Die Liste sollte nachher beeinhalten:
    value1,value2 usw..

    Den Wert des 'key'-Attributes willst du dir also merken, also klammern. Im Attributwert kommen keine '"'.
      <element[^>]+key="([^"]*)"

    Danach wieder beliebige Zeichen außer '>', danach '>'.
      <element[^>]+key="([^"]*)"[^>]+>

    See ya up the road,
    Gunnar

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. Hallo Gunnar,

      danke fuer deine Antwort!

      Ich habe das jetzt meinem Fall angepasst und mal laufen lassen.

      ===Die Datei zum durchsuchen===

      <%@ Control Language="C#" AutoEventWireup="true" CodeFile="LoginNoMailbox.ascx.cs" Inherits="CommonControls_Registration_LoginNoMailbox" %>

      <asp:Panel runat=server ID="pnlNoMailboxUsername" Visible=false>
       <tr class="register_grey">
           <td width="213" align="right" class="register_lefttitel">
            <asp:Label ID="lblUsernameNoMailbox" runat="server"  meta:resourcekey="lblUsernameNoMailbox"></asp:Label>:
        <asp:Label ID="Label2" runat="server" CssClass="required" meta:resourcekey="lblRequired"/>
              </td>
           <td align="left" width="423">
            <asp:TextBox ID="tbUsernameNoMailbox" runat="server" CssClass="register_middle" MaxLength="30"></asp:TextBox>   </td>
         </tr>
         <tr class="register_grey">
          <td>&nbsp;</td>
          <td align="left" class="register_infotext">
          <asp:Label ID="lblUserStillExists" runat="server"  meta:resourcekey="lblNoMailboxUsernameDescription"></asp:Label>
          </td>
         </tr>
      </asp:Panel>

      ===Mein Suchpattern===
      string rex = "<[^>]+meta:resourcekey="([^"]*)"[^>]+>";

      ===Das Resultat===
      <asp:Label ID="Label2" runat="server" CssClass="required" meta:resourcekey="lblRequired"/>

      Zum einen findet er nur genau einen Eintrag (3 Eintraege waeren
      korrekt, und zum anderen liefert er mir das komplette Element,
      nicht den Wert. Letzteres ist jedoch nicht so wild, da ich anhand
      des Strings ja einfach an den Wert gelangen kann.

      Hast du vielleicht noch einen Verbesserungsvorschlag, so dass
      er mir alle Eintraege zurueckliefert?

      Herzlichen Dank!
      Dirk M.

      1. Hello out there!

        Zum einen findet er nur genau einen Eintrag (3 Eintraege waeren
        korrekt, und zum anderen liefert er mir das komplette Element,
        nicht den Wert.

        Ja, sicher matcht der Ausdruck das Ganze. Dein Attributwert ist ja im Geklammerten, also $1.

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. Hallo,

          Ja, sicher matcht der Ausdruck das Ganze. Dein Attributwert
          ist ja im Geklammerten, also $1.

          Zwei Fragen:
          a) Was meinst du mit "das Ganze"? (die _beide_ von mir bemaegelten Sachen?)
          b) "also $1"?

          Sorry, aber ich konnte deiner Antwort leider nicht den Sinn
          entlocken, welchen Du wahrscheinlich darin siehst.

          mfg
          Dirk M.

          1. Hello out there!

            Ja, sicher matcht der Ausdruck das Ganze. Dein Attributwert
            ist ja im Geklammerten, also $1.
            Zwei Fragen:
            a) Was meinst du mit "das Ganze"? (die _beide_ von mir bemaegelten Sachen?)

            Nein, den ganzen Tag von '<' bis '>'.

            b) "also $1"?

            Sorry, aber ich konnte deiner Antwort leider nicht den Sinn
            entlocken, welchen Du wahrscheinlich darin siehst.

            Hier siehst du ihn auch: <http://de.selfhtml.org/perl/sprache/regexpr.htm#merken@title=Teilausdrücke merken mit Klammerung>.

            See ya up the road,
            Gunnar

            --
            „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
      2. Hello out there!

        Hast du vielleicht noch einen Verbesserungsvorschlag, so dass
        er mir alle Eintraege zurueckliefert?

        while-Schleife.

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. Hallo Gunnar,

          ein grosses Dankeschoen fuer deine Hilfe!!
          Konnte es jetzt loesen. Ist zwar noch anpassungsfaehig, aber
          es funktioniert bereits:

            
                  private List<string> GetMetaTagHelper(string content)  
                  {  
                      List<string> ret = new List<string>();  
                      List<string> values = new List<string>();  
                      string searchString = "meta:resourcekey=\"";  
                      string rex = "<[^>]+meta:resourcekey=\"([^\"]*)\"[^>]+>";  
                      Regex regex = new Regex(rex);  
                      bool doContinue = true;  
                      while (doContinue)  
                      {  
                          Match match = regex.Match(content);  
                          content = content.Substring(match.Index + match.Length);  
                          if (string.IsNullOrEmpty(match.Value))  
                              break;  
                          values.Add(match.Value);  
                          if (match.Length<=0)  
                              doContinue = false;  
                      }  
                      foreach(string val in values)  
                      {  
                          int fPosSs = val.IndexOf(searchString);  
                          string cut = val.Substring(fPosSs + searchString.Length);  
                          int fPosQuote = cut.IndexOf("\"");  
                          ret.Add(cut.Substring(0, fPosQuote));  
                      }  
                      return ret;  
                  }  
          
          

          Bis dann
          Dirk M.

  2. hi,

    Ich moechte aus einer Textdatei alle Values eines besteimmten
    Elementes auslesen. Also wie folgt:
    <element [...] key="value1" [..] >
    <element [...] key="value2" [..] >
    usw..

    Die Liste sollte nachher beeinhalten:
    value1,value2 usw..

    Bist Du Dir sicher, dass Du das machen möchtest? Oder möchtest Du dazu besser eine Script- oder Programmiersprache dafür einsetzen?

    roro

    1. Hallo roro,

      da RegularExpressions sprachunanbhaengig sind, bzw. sich in saemtlichen
      Sprachen recht identisch umzusetzen verstehen, ist deine Frage reinen
      lakonischen Wertes und bekommt von mir daher keine Antwort.

      Dirk M.

      1. gudn tach!

        da RegularExpressions sprachunanbhaengig sind, bzw. sich in saemtlichen
        Sprachen recht identisch umzusetzen verstehen, ist deine Frage reinen
        lakonischen Wertes und bekommt von mir daher keine Antwort.

        ich habe zwar roros fragen auch nicht verstanden, aber "lakonisch" bedeutet (nach duden) "kurz, einfach u. ohne Erläuterung". meintest du das?

        prost
        seth

        1. Hallo,

          ich habe zwar roros fragen auch nicht verstanden, aber "lakonisch"
          bedeutet (nach duden) "kurz, einfach u. ohne Erläuterung". meintest
          du das?

          Ich habe seine "Frage" verstanden. Doch diente sie kaum einem anderen
          Zweck, als der, seine, fuer ihn natuerlich unbewusste, Ueberheblickeit
          zu Schau zu stellen - doch so einfach lass ich das natuerlich nicht zu!

          Der Usprung des Wortes "Lakonie" ist schon sehr alt und es
          gibt viele Deutungen bzw. Anwendungafaelle. Dieser war vielleicht
          nicht der Beste, jedoch sicherlich angebracht.

          prost

          Ja, dir auch ;)
          Dirk M.