RegularExrepssions
Dirk M.
- sonstiges
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.
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
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> </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.
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
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.
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
Hello out there!
Hast du vielleicht noch einen Verbesserungsvorschlag, so dass
er mir alle Eintraege zurueckliefert?
while-Schleife.
See ya up the road,
Gunnar
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.
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
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.
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
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.