c#: substring unbekannter länge aus string entfernen

Gast #4876333
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...
Gast
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.
Gast
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
}
Gast
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
}
Gast
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('<');
}
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
Gast
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...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.