Hi, die Überschrift ist etwas verwirrend, was ich möchte ist folgendes. Ich habe eine Datei mit HTML-Elementen. in dieser Datei ist eine Vielzahl an Einträge wie z.B. <p class=...> Was diese Einträge alle gmeinsam habe ist, dass sie mit "<p " beginnen und mit '>' aufhören. Wie kann ich das aus einem string heraus löschen? bsp: string c = "typ: 0815 color: rot <p class="Device1"> pieces: 24" das <p class=Device1> würde ich gerne heraus löschen...
Waldemar Kalov schrieb: > Wie kann ich das aus einem string heraus löschen? suche "<p" wenn gefunden suche ab der stelle ">" wenn gefunden substring mit den errechneten längen. als Alternative kann man auch mit regulären ausdrücken arbeiten "<p[^>]*>"
Hallo, Danke für Deine Hilfe, aber ich verstehe das nicht ganz. Ich wollte ursprünglich mit einer Schleife nach den Zeichen suchen, aber wenn ich per schleife den string durchsuche, dann weiß ich doch nicht an welcher Stelle ich mich gerade befinden wenn ich einen treffen mit '<' gefunden habe?
1 | foreach (char Letter in Text) |
2 | {
|
3 | if (Letter == '<') |
4 | {
|
5 | // wie kann ich ich jetzt nach '>' suchen!?
|
6 | }
|
7 | }
|
Was meinst Du mit > als Alternative kann man auch mit regulären ausdrücken arbeiten > "<p[^>]*>"
Waldemar Kalov schrieb: > Ich wollte ursprünglich mit einer Schleife nach den Zeichen suchen, Du willst das selber machen und keine fertige Methode nehmen? Ok. > aber > wenn ich per schleife den string durchsuche, dann weiß ich doch nicht an > welcher Stelle ich mich gerade befinden wenn ich einen treffen mit '<' > gefunden habe? Dann musst du eben mitzählen, oder eine andere Schleife verwenden. evtl. eine, wo du den Index durchgehst. > Was meinst Du mit >> als Alternative kann man auch mit regulären ausdrücken arbeiten >> "<p[^>]*>" Er meinte Reguläre Ausdrücke (bitte selber googeln oder in Wikipedia nachschlagen) Es gibt aber in der String-Klasse fertige Methoden, die dir den Index eines Zeichens liefern.
:
Bearbeitet durch User
Dirk B. schrieb: > Reguläre Ausdrücke 'regular expressions' ist das Wort womit man mehr infos finden sollte Wäre aber auch meine erste Wahl gewesen :)
Waldemar Kalov schrieb: > welcher Stelle ich mich gerade befinden wenn ich einen treffen mit '<' > gefunden habe? du must mit String.IndexOf arbeiten.
Hallo, vielen Dank! Peter II hat mir den entsprechenden Hinweis geliefert:
1 | foreach(char Letter in meinText) |
2 | {
|
3 | if (Letter == '<') |
4 | {
|
5 | int Start = meinText.IndexOf('<'); |
6 | int Ende = meinText.IndexOf('>'); |
7 | |
8 | meinText = meinText.Remove(Start, (Ende+1) - Start); |
9 | }
|
10 | }
|
.IndexOf gibt es in verschiedenen Variationen. Unter anderem auch mit einem zweiten Parameter vom Typ int32. https://msdn.microsoft.com/de-de/library/5xkyx09y.aspx
so ist es sinnvoller
1 | int pos = meinText.IndexOf('<'); |
2 | while( pos > 0 ) { |
3 | int Ende = meinText.IndexOf('>'); |
4 | meinText = meinText.Remove(Start, (Ende+1) - Start); |
5 | pos = meinText.IndexOf('<'); |
6 | }
|
Peter II schrieb: > int pos = meinText.IndexOf('<'); > while( pos > 0 ) { > int Ende = meinText.IndexOf('>'); > meinText = meinText.Remove(Start, (Ende+1) - Start); > pos = meinText.IndexOf('<'); > } korrektur [/c] int pos = meinText.IndexOf('<'); while( pos > 0 ) { int Ende = meinText.IndexOf('>',pos ); meinText = meinText.Remove(Start, (Ende+1) - Start); pos = meinText.IndexOf('<'); }
Ein Test, ob Ende gültig ist, sollte auch noch drin sein. Und das gesuchte Zeichen könnte ja durchaus auch an der ersten Stelle stehen.
:
Bearbeitet durch User
Oder einen passenden Parser nehmen z.B. http://htmlagilitypack.codeplex.com/wikipage?title=Examples oder das WebBrowser-Control nehmen, DocumentText setzen und, nachdem es geladen/geparst ist, über Document und bspw. über GetElementsByTagName die passenden raussuchen https://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser.documenttext(v=vs.110).aspx https://msdn.microsoft.com/de-de/library/system.windows.forms.htmldocument(v=vs.110).aspx
Schau dich auch mal im namespace Linq um. Der beinhaltet auch lauter solcher Spielereien.
...und bezüglich regulärer ausdrücke gibt es die klasse Regex.
Waldemar Kalov schrieb: > Was diese Einträge alle gmeinsam habe ist, dass sie mit "<p " beginnen > und mit '>' aufhören. > > Wie kann ich das aus einem string heraus löschen? Alle im Thread aufgezeigten Möglichkeiten sind mehr oder weniger mangelhaft, allerdings unter bestimmten Randbedingungen durchaus einsetzbar. Das Problem ist nur: du mußt halt irgendjemanden finden, der dir die Einhaltung der Randbedingungen garantiert... Die universelle Lösung kann deshalb nur ein vollständiger HTML-Parser zur Ermittlung der "Schnittstellen" sein. Alles andere ist hilfloses Gefrickel, was im nächsten Moment schon den Bach runtergehen kann...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.