2012-04-05 7 views
0

Irgendwo in einer großen HTML-Datei:Wie kann man dieses GREP-Regex-Muster herausfinden?

<td headers="fee" style="cursor:pointer;" onclick="toggle('detailinfo088180');"> 
      $675.00 
     </td> 

blabla<br><em>$650</em>">blabla/a> 
    </td> 
    </tr> 

Ich brauche nur die ‚675,00‘ Nummer nach einem Befehl grep haben. Ich habe versucht, eine Regex wie $ [0..9]. * Aber es funktioniert nicht.

Danke,

+0

die Tatsache also, dass es innerhalb von HTML ist nicht besonders relevant ist; Du suchst nur nach einer Nummer, die einem Dollarzeichen folgt, oder? – Wiseguy

+0

Dare ich dupe es .... ja, ja ich tue. [RegEx passt offene Tags mit Ausnahme von XHTML-eigenen Tags an] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – Amber

+1

Gelbe, triviale Datenextraktion von HTML/XML ist möglich und machbar mit Regex. Bei dieser Frage geht es überhaupt nicht darum, die Tag-Struktur abzustimmen. Um es noch einmal zu verdeutlichen: Was sie suchen, ist sehr regelmäßig, so dass Ihre verknüpfte/betrogene Frage überhaupt nicht gilt. – Joey

Antwort

1

Sie wollen - einen Bindestrich verwenden, nicht .. einen Bereich zu bedeuten. Sie müssen auch das $ Literal entgehen, weil es sonst End-of-Line bedeutet.

Dies sollte es sehen: grep "\$[0-9]+"

+0

Den Dezimalpunkt nicht vergessen. – Wiseguy

+0

Es funktioniert aber die Ausgabe ist die gesamte Zeile, ich will nur die Nummer. – Bebeoix

+0

Grep von selbst wird nicht geben, was Sie wollen, dann ... es gibt ganze Zeilen basierend auf einem Spiel zurück. @Wiseguy - Ich habe die Dezimalzahl nicht vergessen ... habe einfach nicht die Notwendigkeit gesehen, so spezifisch zu sein. – phatfingers

0

Dies würde die Zahl aus dem inneren HTML, dass ‚‘ zu extrahieren arbeiten:

/[0-9.]+/

der anderen Teil des Problems ist, Holen Sie sich das HTML mit dem Preis darin. Hier ist ein vollständigeres Beispiel:

<html> 
<head> 
<script> 
    function toggle(e,id) { 
     val = parseFloat(e.innerHTML.match(/[0-9.]+/)); 
     // Another method: 
     // val = parseFloat(e.innerHTML.match(/\$([0-9.]+)/)[1]); 
     alert(val); 
    } 
</script> 
</head> 
<body> 

<table border=1><tr> 
<td headers="fee" style="cursor:pointer;" onclick="toggle(this,'detailinfo088180');"> 
    $675.04 
</td> 

blabla<br><em>$650</em>">blabla/a> 
    </td> 
    </tr> 

</table> 
</body> 
</html> 

Beachten Sie Folgendes:

  • Die toggle() Funktion nimmt einen zusätzlichen Parameter, die das Element ist, das tatsächlich geklickt wurde. (Angenommen, Sie möchten, dass der Preis aus dem angeklickten Element extrahiert wird)
  • Ich habe einen weiteren regulären Ausdruck zur Verfügung gestellt, der restriktiver ist (muss ein "$" an der Vorderseite der Nummer haben), falls dies erforderlich ist. Der Ausdruck verwendet die Erfassung ("(..)"), um eine Zeichenfolge zu finden und einen Teil der Zeichenfolge anstelle der gesamten Zeichenfolge zu extrahieren.

Wenn Sie mehr darüber erfahren möchten, wie reguläre Ausdrücke funktionieren, versuchen Sie here. Oder Google.

+0

Ich denke du willst /\$[0-9.]+/ weil es scheint, dass das Dollarzeichen in dieser Frage signifikant ist. – jwir3

1

Versuchen Sie, diese

grep -e "\$[0-9]\{1,\}\.[0-9]\{2\}" 

I "$" stellen das Muster besser entsprechen, können Sie es nach den grep Streichhölzer entfernen können, eine weitere Operation kochend.

Wenn Sie nur die Nummer extrahieren müssen vielleicht können Sie nicht mit grep, aber Perl entscheiden:

perl -ne '/\$([0-9]+\.([0-9]+))/ && print "$1\n"' < yourfile 
+0

Funktioniert nicht. Ich brauche nur die Nummer, nicht die ganze Zeile. – Bebeoix

+0

Ich aktualisiere den Kommentar mit dem Vorschlag, Perl anstelle von Grep zu verwenden. – dash1e

Verwandte Themen