2013-11-25 2 views
1

R에서 gsub 대체를하려고합니다. 하나의 공백으로 구분 된 두 개의 목록에서 두 개의 용어를 식별하고 밑줄로 대체하고자합니다. 나는 성공적으로 일치를 확인했지만 정규 표현식에서 gsub 문서를 충분히 이해하지 못했습니다. 누군가가 gsub 글을 쓸 수 있습니까?Gsub regex replacement

는 지금은이 :

gsub("(a|b|c)\\s+(x|y|z)","(a|b|c)_(x|y|z)",a x) 

(참고 : 그 중요한 경우이 일치하는 문자열에 여러 곳이 있습니다)

것은 내가 가고 싶은부터 :
도끼 -> a_x
bz -> b_z
안녕하세요 세계 bx 어떻게 아빠입니까 -> 안녕하세요 세계 b_x 어떻게 a_z 너 ... 등등.

하는 대신 수행합니다
AX -> (A | B | C) (X | Y | z)
BZ -> (A | B | C)
(X | Y | z) .. . 등등.

만약 누군가가 약간의 이론을 고맙게 여기고 싶지만 마감일을 맞추기 위해 노력하고 있으므로 동시 응답이 이상적 일 것입니다.

감사합니다.

+0

'gsub' 의사를 통해 직접 답을 얻는 것보다 질문을 쓰는 데 시간이 오래 걸렸을 것입니다. '\\ 1', '\\ 2'등을 사용하는 예제도 있습니다. – flodel

답변

2

첫 번째와 두 번째 ()의 용어를 단독으로 바꾸려면 \\1\\2을 사용해야합니다.

vec <- "hello world b x how are a z you" 

gsub("(a|b|c)\\s+(x|y|z)","\\1_\\2", vec) 
# [1] "hello world b_x how are a_z you" 
+0

감사합니다. "\\ 1"과 같이 소리가났다는 문서는 어떤 장소에서 백 스페이스의 수를 의미합니다. 세분화는 실제로 어떻게 수행됩니까? 자동으로 공간이 분리 되었습니까? – user3030872

+0

@ user3030872 이미 답에서 언급했듯이,'\\ 1'은 첫 번째'()'내의 문자열입니다. –