2012-03-23 4 views
0

Ich arbeite an R, und ich möchte alle HTML-Tag geschlossen aus einem PlainTextDocument extrahieren. Ich benutze eine gsub-Methode mit einem regex:Extract alle HTML-Tag mit einem Regex-Ausdruck geschlossen

gsub("<?!([^<]/*)>"," ",fm,perl=TRUE,ignore.case=TRUE) 

Aber der Schrägstrich ‚/‘ nicht ausgewertet.


Ich glaube, ich nicht sehr klar war.

Hier ist, was ich tun muss:

Ich habe einen Text (ein HTML-Dokument), und ich möchte nur die Tags halten (<> und </>). Ich dachte, mit gsub wäre eine gute Idee, aber vielleicht haben Sie eine bessere Lösung.

+0

Müssen Sie die '/' entkommen? – Cheetah

+0

Ich stimme mit Ben überein, wenn dies geparst wird, da eine Perl-Regex nicht das '/' als Trennzeichen benutzt? –

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#answer-1732454 – Axeman

Antwort

0

braucht es wahrscheinlich zu ‚entkommen‘: \\/

1

Die Formulierung Ihrer Frage ist unklar, und Ihre regex macht nicht viel Sinn machen, aber wenn Sie wollen einfach nur etwas passen, die wie ein HTML-Tag sieht dies sollte es tun:

"<[^<>]+>" 

, dass sowohl das Öffnen und Schließen-Tags entsprechen (zB <tag attr="value"> und </tag>). Wenn Sie nur selbstschließenden Tags (z.B. <tag />) übereinstimmen soll, sollte diese Arbeit:

"<[^<>]+/>" 

Andere haben vorgeschlagen, dass der Schrägstrich (/) besondere Bedeutung hat und sein entkommen muss, aber das ist nicht wahr. Wenn Sie Perl verwendet haben, können Sie diesen Befehl verwenden, um die Substitution zu tun:

s/<[^<>]+\/>/ /g 

Aber der Schrägstrich selbst hat keine besondere Bedeutung; Ich musste nur entkommen, weil ich es als Regex-Begrenzer verwendete. Ich könnte genauso gut ein anderes Trennzeichen verwenden:

s~<[^<>]+/>~ ~g 

Aber R nicht reguläre Ausdrücke in der Sprachebene unterstützen wie Perl tut; Die Regex und die Ersetzung werden in Form von String-Literalen geschrieben, genau wie sie (zum Beispiel) in Java und C# sind. Und im Gegensatz zu PHP, ist es erforderlich, dass Sie Trennzeichen hinzuzufügen, wie auch immer, wie in:

preg_replace("/<[^<>]+\/>/", " ") 

Aber auch PHP können Sie Ihre eigene Trennzeichen wählen:

preg_replace('~<[^<>]+/>~', ' ') 

Bevor jemand mich auf diese ruft Ich weiß, <[^<>]+> ist fehlerhaft - dass es in der Tat nicht so etwas wie eine korrekte Regex für HTML-Tags gibt. Dies wird in vielen Fällen der Fall sein, aber die einzige wirklich zuverlässige Methode zum Analysieren von HTML ist ein dedizierter HTML-Parser.

+0

Ich habe meine eigene Frage beantwortet, ich hoffe, ich habe mich klarer ausgedrückt. – PoLuX