Thaler,Thorn,LAUSANNE,Applied Mathematics
2013-May-08 09:08 UTC
[R] gsub regex simplification
Dear all, I want to use gsub to change a vector of strings. Basically, I want to replace any dot by a space, remove the possibly appended ".f" and I want to capitalize each word. I did that by chaining multiple gsubs together, but I was wondering (for the sake of learning - maybe the current version is more readable) whether I could do that with a _single_ gsub call? Thanks for your help! txt <- c("example1", "example2.f", "another.example3.f", "yet.another.example4.f") gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", gsub("\\.", " ", gsub("\\.f", "", txt)), perl = TRUE) Thanks for your input! Kind Regards, Thorn Thaler NRC Lausanne Applied Mathematics +41 21 785 8220
On Wed, May 8, 2013 at 5:08 AM, Thaler,Thorn,LAUSANNE,Applied Mathematics <Thorn.Thaler at rdls.nestle.com> wrote:> Dear all, > > I want to use gsub to change a vector of strings. Basically, I want to replace any dot by a space, remove the possibly appended ".f" and I want to capitalize each word. I did that by chaining multiple gsubs together, but I was wondering (for the sake of learning - maybe the current version is more readable) whether I could do that with a _single_ gsub call? > > Thanks for your help! > > txt <- c("example1", "example2.f", "another.example3.f", "yet.another.example4.f") > gsub("(^|[[:space:]])([[:alpha:]])", "\\1\\U\\2", > gsub("\\.", " ", gsub("\\.f", "", txt)), > perl = TRUE) >gsubfn() in the gsubfn package is like gsub except that the replacement string can be a user function, list or proto object. Using a function one call to gsubfn could do it: Note that the user function's i-th argument captures the i-th back reference and the function's output is used to replace its input so: library(gsubfn) f <- function(x1, x2, x3) { if (x1 != "") return("") if (x2 != "") return(" ") if (x3 != "") return(toupper(x3)) } gsubfn("(.f$)|(\\.)|(\\b.)", f, txt, perl = TRUE) The last line gives: [1] "Example1" "Example2" "Another Example3" "Yet Another Example4" See http://gsubfn.googlecode.com -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com