2012-07-23 15 views
7

Mam ciąg, który jest mieszane litery i cyfry:R regex gsub oddzielne litery i cyfry

"The sample is 22mg" 

Chciałbym podzielić ciągi gdzie numer jest natychmiast następuje listem tak:

"The sample is 22 mg" 

próbowałem to:

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

ale nie jestem uzyskanie pożądanych rezultatów.

Wszelkie sugestie?

Odpowiedz

14

Musisz użyć przechwytywania nawiasów w wyrażeniu regularnym i odniesień do grupy w zamienniku. Na przykład:

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

Nie ma tu nic szczególnego dla R; Pomoc R dla regex i gsub powinna być do pewnego użytku.

10

Trzeba backreferencing:

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

Wszystko w nawiasach zostanie zapamiętany. Dostęp do nich uzyskuje się za pomocą \ 1 (dla pierwszego elementu w parens), \ 2 itd. Pierwszy ukośnik odwraca interpretację odwrotnego ukośnika w R, aby został przekazany do analizatora wyrażeń regularnych.

Powiązane problemy