2012-07-23 23 views
7

Ich habe eine Zeichenfolge, die gemischten Buchstaben und Zahlen ist:R regex gsub separate Buchstaben und Zahlen

"The sample is 22mg" 

Ich mag würde Strings aufteilen, wo eine Reihe unmittelbar nach Buchstaben, etwa so:

"The sample is 22 mg" 

ich habe dies versucht:

gsub('[0-9]+[[aA-zZ]]', '[0-9]+ [[aA-zZ]]', 'This is a test 22mg') 

bin aber nicht immer die gewünschten Ergebnisse.

Irgendwelche Vorschläge?

Antwort

14

Sie müssen im regulären Ausdruck Klammern und Gruppenreferenzen in der Ersetzung verwenden. Zum Beispiel:

gsub('([0-9])([[:alpha:]])', '\\1 \\2', 'This is a test 22mg') 

Es gibt nichts, R-spezifische hier; Die R-Hilfe für regex und gsub sollte von Nutzen sein.

10

Sie benötigen Rückreferenzierung:

test <- "The sample is 22mg" 
> gsub("([0-9])([a-zA-Z])","\\1 \\2",test) 
[1] "The sample is 22 mg" 

Alles, was in Klammern erinnert wird. Dann wird von \ 1 (für die erste Entität in Parens), \ 2 usw. zugegriffen. Der erste umgekehrte Schrägstrich entkoppelt die Interpretation des umgekehrten Schrägstrichs in R, so dass er an den Parser für reguläre Ausdrücke übergeben wird.