2013-07-27 17 views
7

Ich versuche, eine Sequenz von Zahlen aus einer Spalte in Google Refine zu extrahieren. Hier ist mein Code, es zu tun:Value.match() Regex in Google Refine

value.match(/[\d]+/)[0] 

Die Daten in meiner Spalte wird im Format von

abcababcabc 1234566 abcabcbacdf 

Die Ergebnisse ist "null". Ich habe keine Idee warum!! Es ist auch null, wenn ich statt \d\w versuche.

Antwort

7

OpenRefine fügt keine impliziten Platzhalter am Ende des Musters hinzu, wie es bei einigen Systemen der Fall ist (und wie man es erwarten könnte). Versuchen Sie, diese Muster statt:

value.match(/.*?(\d+).*?/)[0] 

Sie müssen die faulen/nicht-gierigen Qualifier (dh Fragezeichen) auf dem Platzhalter, so dass sie nicht zu einigen Ihre Ziffern verschlingen. Wenn Sie nur /.*(\d+).*/ verwenden, werden Sie nur eine einzelne Ziffer zuordnen, da der Rest von ihnen mit dem * -Muster aufgenommen wird.

Vollständige Dokumentation für die Implementierung kann in Javas Pattern class docs gesehen werden.

+0

Hallo Tom - Danke für deine Antwort. Ich habe Ihren Vorschlag versucht, aber ich bekomme immer noch eine Null – mchangun

+0

Ich dachte, es war vielleicht, weil ich die Entwicklungsversion verwendet habe, aber ich ging einfach zurück und cut-and-paste die genauen Daten und Regex von dieser Seite in Refine 2.5 und bekam 1234566, also bin ich mir nicht sicher, was ich vorschlagen soll. –

+0

Es funktioniert jetzt tatsächlich - ich habe es an einem Eingang versucht, der etwas anders ist. Können Sie erklären, was Ihre Regex bedeutet? Was ist der faule/nicht-gierige Qualifier? Auch die Dokumentation, die ich lese, scheint nicht zu helfen (https://github.com/OpenRefine/OpenRefine/wiki/Understanding-Regular-Expressions). Gibt es eine weitere Referenz, die Regex in Open Refine erklärt? Vielen Dank! – mchangun