2016-03-28 6 views
-1

Ich verstehe nicht, warum die Syntax nicht funktionierte. Warum kann die Zeichenfolge "10-year" und die Zeichenfolge "(342)", aber nicht "10-year (342)" gefunden werden? (Ich nehme an, wenn es -1 zurückgibt, bedeutet es, kann es nicht finden) Was vermisse ich? Danke im Voraus.R: Regexpr fehlgeschlagen?

pos = regexpr('10-year(342)', '<td class="sente">10-year(342)<td class="sente">')

enter image description here

+2

Parens sind Sonderzeichen in einem regulären Ausdruck. Wenn Sie nach literalen Parens suchen möchten, müssen Sie ihnen entkommen, z. B. "10 -year \\ (342 \\)". Die wirkliche Lösung hier ist wahrscheinlich, keine regulären Ausdrücke in HTML zu verwenden, sondern stattdessen einen tatsächlichen HTML/XML-Parser zu verwenden. – joran

+0

Danke, ich habe gelesen "Jedes Metazeichen mit besonderer Bedeutung kann zitiert werden, indem man es mit einem Backslash vorausgeht." Aus stat.ethz.ch/R-manual/R-devel/library/base/html/regex.html, aber es habe keine doppelten Backslashes gesagt ... –

+0

Ja, das kann ein bisschen verwirrend sein. Beachten Sie, dass "\" selbst als Sonderzeichen aufgeführt wird, was bedeutet, dass durch Rekursion, um einen _actual_ Backslash zu erhalten, tatsächlich zwei "\\" benötigt werden. – joran

Antwort

1

Die runden Klammern in Ihrem Ausdruck interpretiert. Sie sollten ihnen wie folgt entkommen:

regexpr('10-year\\(342\\)', '<td class="sente">10-year(342)<td class="sente">') 
+0

Danke, ich habe gelesen "Jedes Metazeichen mit besonderer Bedeutung kann zitiert werden, indem man es mit einem umgekehrten Schrägstrich vorausgeht." Von https://stat.ethz.ch/R-manual/R-devel/library/base/html/regex. html, aber es gab keine doppelten Backslashes ... –

Verwandte Themen