[R] Difficulty with "\\" in string functions....

Ivan Krylov kry|ov@r00t @end|ng |rom gm@||@com
Mon Feb 11 21:13:57 CET 2019


On Mon, 11 Feb 2019 15:01:16 -0500 (EST)
Bernard McGarvey <mcgarvey.bernard using comcast.net> wrote:

> Now I try to split it using
> 
> 
> str_split(Fname1,"\\")
> 
> 
> but this returns an error
> 
> 
> Error in stri_split_regex(string, pattern, n = n, simplify =
> simplify, : Unrecognized backslash escape sequence in pattern.
> (U_REGEX_BAD_ESCAPE_SEQUENCE)

This happens because the second parameter of str_split is by default a
regular expression, and a backslash has a special meaning in regular
expressions: when preceding other characters, it may change the way
they are interpreted. (For example, w means a literal "w"
character, while \w means "any alphanumeric character". On the
other hand, [ starts a character group, but \[ means just an opening
square bracket.) See ?regex for more info on that.

Since you want a literal backslash, you need to escape it with another
backslash: \\

But to write a string literal of a double-backslash in R, you need to
escape both backslash characters, each with their own backslash: "\\\\"

## fname <- "D:\\Data\\OneDrive\\ISTA Documents\\QT_App\\QT Analysis
Input Data Example WorkBook.xlsx"
## message("\\\\")
\\
## str_split(fname, "\\\\")
[[1]]
[1] "D:"                                         
[2] "Data"                                       
[3] "OneDrive"                                   
[4] "ISTA Documents"                             
[5] "QT_App"                                     
[6] "QT AnalysisInput Data Example WorkBook.xlsx"

You can also avoid all layers of the backslash hell (except the first)
if you choose to split by fixed strings instead of regular expressions
by using stringr::fixed:

## str_split(fname, fixed("\\"))

-- 
Best regards,
Ivan



More information about the R-help mailing list