Hi R, Again struck with regular expressions... Suppose, S=c("World_is_beautiful", "one_two_three_four","My_book") I need to extract the last but one element of the strings. So, my output should look like: Ans=c("is","three","My") gsub() can do this...but wondering how do I give the regular expression.... Shubha Karanth | Amba Research Ph +91 80 3980 8031 | Mob +91 94 4886 4510 Bangalore * Colombo * London * New York * San José * Singapore * www.ambaresearch.com This e-mail may contain confidential and/or privileged i...{{dropped:13}}
try this: S <- c("World_is_beautiful", "one_two_three_four","My_book") sapply(strsplit(S, "_"), tail, n = 2)[1, ] # or sapply(strsplit(S, "_"), function(x) x[length(x) - 1]) I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://www.student.kuleuven.be/~m0390867/dimitris.htm ----- Original Message ----- From: "Shubha Vishwanath Karanth" <shubhak at ambaresearch.com> To: <r-help at stat.math.ethz.ch> Sent: Tuesday, May 13, 2008 11:02 AM Subject: [R] Regular Expressions Hi R, Again struck with regular expressions... Suppose, S=c("World_is_beautiful", "one_two_three_four","My_book") I need to extract the last but one element of the strings. So, my output should look like: Ans=c("is","three","My") gsub() can do this...but wondering how do I give the regular expression.... Shubha Karanth | Amba Research Ph +91 80 3980 8031 | Mob +91 94 4886 4510 Bangalore * Colombo * London * New York * San Jos? * Singapore * www.ambaresearch.com This e-mail may contain confidential and/or privileged i...{{dropped:13}} --------------------------------------------------------------------------------> ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> S=c("World_is_beautiful", "one_two_three_four","My_book")> I need to extract the last but one element of the strings. So, my > output should look like:> Ans=c("is","three","My")> gsub() can do this...but wondering how do I give the regularexpression.... sapply(strsplit(S, "_"), function(x) x[length(x)-1]) You could use regular expressions, but I think it would only be complicating things. Regards, Richie. Mathematical Sciences Unit HSL ------------------------------------------------------------------------ ATTENTION: This message contains privileged and confidential inform...{{dropped:20}}
On Tue, May 13, 2008 at 5:02 AM, Shubha Vishwanath Karanth <shubhak at ambaresearch.com> wrote:> Suppose, > > S=c("World_is_beautiful", "one_two_three_four","My_book") > > I need to extract the last but one element of the strings. So, my output should look like: > > Ans=c("is","three","My") > > gsub() can do this...but wondering how do I give the regular expression.... >As others have mentioned strsplit is probably easier in this case but it can be done with a regular expression as shown below where [^_]+ matches a any string of characters not containing _ :> re <- "^([^_]+_)*([^_]+)_([^_]+)$" > gsub(re, "\\2", S)[1] "is" "three" "My" The strapply function in the gsubfn package can also be used. out below has the same value as strsplit(S, "_"): library(gsubfn) out <- strapply(S, "[^_]+") sapply(out, function(x) tail(x, 2)[1])