2016-04-28 17 views
0

Ich habe einen Text innerhalb eines span-Tages in einer HTML-DateiExtrahieren von Text aus ‚<' and '>‘

Ich brauche es zu extrahieren, ich versuchte, dies so weit, aber es scheint nicht zu funktionieren:

Html:

"<span id=\"MainContent_lblGenAssessment\">$866,250</span></dd>" 

ich versuchte dies:

gsub(x = "<span id=\"MainContent_lblGenAssessment\">$866,250</span></dd>"r,pattern = ">(.*?)<",replacement = "\\1") 

Aber es scheint nutzlos, Wie kann ich die 86 extrahieren 6.250?

Bearbeiten: es muss die Standard-R-Bibliotheken verwenden, ich kann keine Pakete installieren.

+1

"Ich kann keine Pakete installieren" Das ist extrem unwahrscheinlich. – Roland

+0

Obligatorischer Link zur kanonischen Frage zum Thema: [RegEx-Übereinstimmung mit offenen Tags außer XHTML-eigenen Tags] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained -Stichworte). – sleske

+0

Regex sollte nicht auf HTML verwendet werden. Der richtige Weg, dies zu tun wäre, ein HTML-Parsing-Paket zu installieren und es richtig zu machen. Ich empfehle 'XML :: xmlValue' –

Antwort

5

Der rechts Weg, dies zu tun, um extrahieren wollen, ist die HTML mit einem Parser zu analysieren, wie folgt:

library(rvest) 
x %>% read_html() %>% html_text() 
# [1] "$866,250" 

Wenn Sie müssen tun Sie es mit Regex (eine sehr schlechte Idee, wenn es für viele Daten oder es ist sonst schwierig, das Ergebnis, z. in programmtechnische Verwendung), tun Sie könnten es mit:

sub('.*>([^<]+)<.*', '\\1', x) 
# [1] "$866,250" 

Wenn der span-Tag in der Mitte von viel mehr HTML ist, werden Sie mehr regex in dem angeben.

Die Regex sucht

  • jedes Zeichen . 0 oder mehrmals wiederholt *,
  • gefolgt von >
  • durch eine Erfassungsgruppe gefolgt (...)
    • alle Zeichen außer [^ ... ] enthält
      • a <
    • wiederholt ein oder mehrere Male +
  • von < gefolgt
  • beliebiges Zeichen folgt . 0 oder mehrmals wiederholt *,

und ersetzt es mit der ersten erfassten Gruppe, \\1.

+0

Dies funktioniert, können Sie den Regex bitte erklären. Dieser Text ist in einer bestimmten ID, die einzigartig ist – Kevin

+0

@Kevin Bearbeitet, um zu erklären, dass es die gesamte Zeile übereinstimmt, aber nur erfasst, was zwischen '' 'und' <'ist, und ersetzt das Ganze mit dem, was erfasst wird. – alistaire

2

versuchen Sie dies:

([\d,]*)<\/span>

Unter der Annahme, dass jede Zahl, die Sie ist in dem <span> Tag

+0

Fehler: '\ d' ist ein nicht erkanntes Escapezeichen in der Zeichenfolge" "([\ d" – Kevin

+0

@Kevin - '\\ d' in R regex. – thelatemail

+0

@JanLeeYu hier ist das Ergebnis : $ 866,250 "Es entfernt das span-Tag, ich habe keine Ahnung, warum R dies tut. – Kevin