2016-04-01 11 views
0

Ich habe viele Zeichenfolgen, die so aussehen, mit einer großen Varianz der Zahlen :Extrahieren von Pluszeichen (+), Minuszeichen (-) und Punktzeichen (.) Und alle Zahlen [0-9] aus einer Zeichenkette in R

tester1 <- "{\"fullgame\":\"-303\"}" 

tester2 <- "{\"fullgame\":\"+7.5\"}" 

würde Ich mag Plus (+) extrahieren, minus (-) und Punkt-Zeichen, zusammen mit allen Zahlen [0-9] von meinem Strings (.). Ich möchte auch die aktuelle Reihenfolge jedes dieser Elemente beibehalten, so wie sie in der Zeichenkette erscheinen.

Ich mag die resultierenden Strings sein:

formatted1 = "-303" 

formatted2 = "+7.5" 

Ich weiß, dass Funktionen wie gsub, strsplit und regex würden für diese Anwendung ideal sein, aber für das Leben von mir, ich kann nicht herausfinden, die Perl-Syntax = (.

Jede Hilfe wäre sehr dankbar! Danke Jungs!

+0

haben Sie sie zu einem einzigen neuen String extrahiert werden soll? – DavidO

+0

['[+ -] [.0-9] +'] (https://regex101.com/r/aQ6sW9/1). Es könnte dir passen. –

+0

Welche Perl-Syntax möchten Sie? –

Antwort

4

Ihre Strings sehen wie json viel aus. Weitere Informationen finden Sie unter wiki page. Sie sollten nicht versuchen, sie mit regex zu analysieren; Verlasse dich stattdessen auf einen spezifischen json Parser. Es gibt viele in R. die gewünschte Menge zu extrahieren ist so einfach wie:

require(jsonlite) #other libraries: rjson, RJSONIO 
fromJSON(tester1) 
#$fullgame 
#[1] "+7.5" 
+0

Danke Nicola! Ich bin etwas neu in R und Programmierung im Allgemeinen, also habe ich nicht verstanden, dass dies "Json" sein könnte. Ich schätze Ihre Hilfe in dieser Angelegenheit. – IRNotSmart

+0

Froh, dass es geholfen hat. Überlegen Sie, die Antwort zu akzeptieren, wenn Sie es hilfreich fanden. – nicola

-1

Sie können alles gsub, die nicht die Art der Zeichen nicht übereinstimmen, die Sie sehen sind ing für:

gsub('[^+-.0-9]', '', tester1) 
# [1] "-303" 
gsub('[^+-.0-9]', '', tester2) 
# [1] "+7.5" 

[^ ... ] definiert eine Reihe von Zeichen ... wo die ^ es etwas entsprechen mit Ausnahme von ihnen erzählt. gsub ersetzt dann alle diese Zeichen durch nichts und lässt Sie mit dem, was Sie wollen.

1

Ich weiß nicht, über „Perl“, aber das RegexMuster zieht Ihre Zahlen aus:

> gsub("([^-+]+)([+-]{0,1}[0-9.]+)(.+)", "\\2", c(tester1,tester2)) 
[1] "-303" "+7.5" 

die pattern brechen auseinander, die drei Capture Abschnitte hat:

([^-+]+) : uses the negation operator in a character class to match any sequence that is 
      not a plus or minus sign 
([+-]{0,1}[0-9.]+) : the second capture class allows (but does not require) a single 
      +/- sign, followed by any number of digits or decimal point/period 
(.+) : is the third capture class ... anything else that is trailing 

Dieses ist ein etwas konkreter darüber, welche Form die Zahlen und Dezimalstellen annehmen können, indem sie den optionalen einzelnen Dezimalpunkt und die folgenden Ziffern hinzufügen:

gsub("([^-+]+)([+-]{0,1}[0-9]+[.]{0,1}[0-9]*)(.+)", "\\2", c(tester1,tester2)) 

Ich bin mir ziemlich sicher, dass es frühere Buchungen gab, die die Extraktion von vorzeichenbehafteten Dezimalzahlen betrafen.

+0

Vielen Dank für Ihre Antwort! Ich habe viele Postings gesehen, die ähnliche Sequenzen für gsub hatten, aber sie enthielten nicht alle die Zeichen plus (+), minus (-) und Punkt (.). Ich schätze Ihre Hilfe! – IRNotSmart

Verwandte Themen