2012-07-23 40 views
7

Tôi có một chuỗi đó là chữ hỗn hợp và số:R regex gsub chữ và số riêng biệt

"The sample is 22mg" 

Tôi muốn chia dây, nơi một số được ngay lập tức sau đó là lá thư như thế này:

"The sample is 22 mg" 

Tôi đã thử điều này:

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

nhưng không nhận được kết quả mong muốn.

Mọi đề xuất?

Trả lời

14

Bạn cần sử dụng chụp dấu ngoặc đơn trong biểu thức chính quy và tham chiếu nhóm trong phần thay thế. Ví dụ:

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

Không có gì đặc trưng cho R ở đây; sự giúp đỡ R cho regexgsub nên sử dụng một số.

10

Bạn cần backreferencing:

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

Bất cứ điều gì trong ngoặc đơn được ghi nhớ. Sau đó, chúng được truy cập bởi \ 1 (đối với thực thể đầu tiên trong parens), \ 2, vv Dấu gạch chéo ngược đầu tiên thoát khỏi cách giải nghĩa của dấu gạch chéo ngược trong R sao cho nó được chuyển tới trình phân tích biểu thức chính quy.

Các vấn đề liên quan