Po spędzeniu wielu godzin na szukaniu odpowiedzi i ponieważ w końcowej fazie desperacji jest 3:15, zadaję to podstawowe pytanie (ponieważ nic nie wiem o wyrażeniach regularnych).Usuń wszystkie kropki, ale pierwsze w łańcuchu znaków charytatywnych
Chcę zastąpić wszystkie oprócz pierwszych kolejnych kropek. Oto przykład tego, co chcę:
> 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?
Wszelkie wskazówki, jak rozwiązać ten problem za pomocą regex docenione.
jej prosty można zastąpić. +. – Civa