2013-06-03 2 views
5

답변을 검색하는 데 지출 한 시간이 있고 절망적 인 상황의 마지막 단계에서 오전 3시 15 분이므로이 기본 질문을 묻습니다 (정규식에 대해 아무것도 모르기 때문에).charchter 문자열의 첫 번째 점만 제외하십시오.

첫 번째 연속 점 이외의 모든 점을 바꿔야합니다. 감사 정규식으로이 문제를 해결하는 방법에 대한

> names.orig <- c("test & best", "test & worse &&&& ? do") 
> names <- make.names(names.orig) 
> names 
[1] "test...best"    "test...worse.........do" 
> 
> # But I want this instead: 
> # [1] "test.best"    "test.worse.do" 
> 
> # Desperatley tried: 
> gsub("\\.{2, }", "", names) 
[1] "testbest" "testworsedo" 
> gsub("\\G((?!^).*?|[^\\.]*\\.*?)\\.", "", names) 
Error in gsub("\\G((?!^).*?|[^\\.]*\\.*?)\\.", "", names) : 
    invalid regular expression '\G((?!^).*?|[^\.]*\.*?)\.', reason 'Invalid regexp' 
> # etc. 
> 
> # The only thing that works for me is this 
> unlist(lapply(strsplit(names, "\\."), function(x) paste(x[x != ""], collapse="."))) 
[1] "test.best"  "test.worse.do" 
> 
> # But, really, what is the right regex in combination with what? 

어떤 힌트 : 여기에 내가 원하는 걸의 예입니다.

+0

간단하게 교체 할 수 있습니다. 조슈아 덕분에 – Civa

답변

6

첫 번째 정규식에 ".""" 교체 :이 또한 작동

R> nms <- make.names(c("test & best", "test & worse &&&& ? do")) 
R> gsub("\\.{2, }", ".", nms) 
[1] "test.best"  "test.worse.do" 

합니다. 기본적으로 모든 점과 연속 점을 단일 점으로 바꿉니다.

R> gsub("\\.+", ".", nms) 
[1] "test.best"  "test.worse.do" 
+0

. 나는 그것이 단지 내가 그것을 볼 수 없었던 것은 명백했다라는 것을 알고 있었다. .. :) – Samo

관련 문제