Finde alle 'mehr oder weniger als' Zeichen, die keine Tags in XML sind

8

Ich brauche eine Regex, um alle "& lt;" oder '& gt;' Das sind keine XML-Tags.

Beispiel:

%Vor%

Sollte finden

%Vor%

Beispiel:

%Vor%

Sollte finden

%Vor%

Also, irgendwelche Treffer wo '& lt;' oder '& gt;' ist nicht in einem Tag (ja, wir haben auch selbstschließende Tags, die in Betracht gezogen werden sollten:)

Bearbeiten Sie # 2: Ich möchte am Ende alle Übereinstimmungen durch die HTML-kodierten Werte ersetzen.

Bearbeiten Sie # 3:

Also, was ich tun möchte, ist von einem Text, der HTML mit einigen zusätzlichen Tags enthält (sehr wenige bekannte Tags), alle '& lt;' und '& gt;' was nicht in den Tags enthalten ist.

Beispiel (die fettesten, die ich finden möchte, damit ich sie durch ihre codierten Werte ersetzen kann):

%Vor%

Ergebnis sollte sein:

%Vor%

Irgendeine Idee, wie Sie dieses Problem lösen können?

    
Carl-Otto Kjellkvist 09.06.2013, 17:23
quelle

7 Antworten

6

Dies kann mit Regex geschehen; Es ist jedoch nicht so einfach, wie Sie es vorschlagen. Sie müssen gültige Tags finden und verarbeiten, damit dies funktioniert. Es passiert einfach, dass ich das vor einiger Zeit gemacht habe, als ich einen schnellen und leichten xml / html Parser geschrieben habe. Der Code ist verfügbar unter:

Ссылка Ссылка

Um den Parser zu verwenden, implementieren Sie die definierte Schnittstelle IXmlLightReader aus der späteren der beiden Quelldateien. Das folgende Beispiel erzeugt Ihre gewünschten Ergebnisse und behandelt auch einige andere Funktionen, die Sie nicht erwähnt haben, wie CDATA-Abschnitte, Verarbeitungsanweisungen, DTDs usw.

%Vor%

Das vorhergehende Programm gibt die folgenden Ergebnisse aus:

%Vor%

Hinweis: Ich habe die XML-Deklaration, CDATA und '& amp;' Text nur zum Testen.

    
csharptest.net 11.06.2013, 22:54
quelle
3

Verwenden Sie eine der Methoden aus Diese Frage und entfernen Sie HTML-Tags der Eingabe

dann

%Vor%     
Damith 09.06.2013 17:34
quelle
2

Nach Ihrem Beispiel zu urteilen, suchen Sie anscheinend nicht nach XML-Dateien, wie das Thema es vorschlägt, sondern eher nach XML-ähnlichen Dateien - vielleicht Dateien, die XML wären, wenn sie nicht das "& lt;" enthielten. und "& gt;" Zeichen, die Sie suchen.

Aber Sie haben die Aufgabe nicht klar genug angegeben. Was zum Beispiel mit

passieren soll %Vor%

oder mit

%Vor%

Das Aufheben des zweiten Falles ist ziemlich schwierig (vielleicht unmöglich) mit regulären Ausdrücken alleine zu erreichen. Sie müssen die Grammatik oder die Eingabesprache definieren, die Sie akzeptieren möchten (eine Erweiterung von XML) und sie mit rekursiven Analysetechniken analysieren.

    
Michael Kay 09.06.2013 21:07
quelle
0

In Ihrem begrenzten Fall scheint es, dass es eine Algorithmus-Strategie gibt, die funktionieren könnte, die wie folgt umrissen werden kann:

  1. Suchen Sie von links nach rechts nach einem offenen Tag, d. h. <something> .
  2. Falls gefunden, suchen Sie die verbleibende Zeichenfolge nach dem passenden close-Tag, </something>
  3. Wiederholen Sie die Schritte eins und zwei für die Zeichenfolge zwischen den offenen und geschlossenen Tags, die so lange gefunden wurden, wie Sie passende Paare gefunden haben
  4. Für Sequenzen der Zeichenfolge, in der kein Tag-Paar zum Öffnen / Schließen gefunden wird, Ersetzen Sie alle Vorkommen von < und > durch die Escapezeichen.
quelle
0

Ich habe nicht viel von Ihrer Frage verstanden, aber ich habe einen Code geschrieben, der Ihr HTML-Beispiel übernimmt und dasselbe HTML-Ergebnis mit Ihrem erwarteten HTML-Ergebnis zurückgibt.

%Vor%     
a1204773 11.06.2013 20:26
quelle
0

Angesichts der neuen Formulierung Ihres Problems in Edit # 3 könnten Sie es mit einem regulären Ausdruck lösen, der "& lt;" entspricht. gefolgt von einem negativen Lookahead

%Vor%

entspricht < , wenn nicht einer der bekannten Tag-Namen folgt, und ersetzt dann "<" durch "&lt;"

    
Michael Kay 12.06.2013 08:33
quelle
0
%Vor%     
Bastianon Massimo 18.06.2013 08:55
quelle

Tags und Links