Actually, the zero-length look-ahead expression is enough to get the job done:
> strsplit(c(":sad", "happy:", "happy:sad", ":happy:sad:subdued:"), split="(?=:)", perl=TRUE) [[1]] [1] ":" "sad" [[2]] [1] "happy" ":" [[3]] [1] "happy" ":" "sad" [[4]] [1] ":" "happy" ":" "sad" ":" "subdued" ":" Bill Dunlap TIBCO Software wdunlap tibco.com On Mon, Dec 8, 2014 at 1:13 PM, William Dunlap <wdun...@tibco.com> wrote: > strsplit(split=":") does almost what you want, but it omits the colons > from the output. You can use perl zero-length look-ahead and look-behind > operators in the split argument to get the colons as well: > > > strsplit(c(":sad", "happy:", "happy:sad"), split="(?<=:)|(?=:)", > perl=TRUE) > [[1]] > [1] ":" "sad" > > [[2]] > [1] "happy" ":" > > [[3]] > [1] "happy" ":" "sad" > > > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > On Mon, Dec 8, 2014 at 9:08 AM, Gang Chen <gangch...@gmail.com> wrote: > >> I want to do the following: if a string does not contain a colon (:), >> no change is needed; if it contains one or more colons, break the >> string into multiple strings using the colon as a separator. For >> example, "happy:" becomes >> >> "happy" ":" >> >> ":sad" turns to >> >> ":" "sad" >> >> and "happy:sad" changes to >> >> "happy" ":" "sad" >> >> How to do this? >> >> Thanks, >> Gang >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >> > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.