c#: substring unbekannter länge aus string entfernen

Gast #4876333
Lesenswert?

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 #4876348
Lesenswert?

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[^>]*>"
#4876355
Lesenswert?

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 #4876380
Lesenswert?

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 #4876387
Lesenswert?

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 #4876389
Lesenswert?

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('<');
}
#4876412
Lesenswert?

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 #4876904
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren