R: strsplit 反斜杠 (\)
R: strsplit on backslash (\)
我试图提取字符串中第一个反斜杠之前的部分,但我似乎无法让它正常工作。
根据 strsplit 的手册页并在网上搜索后,我尝试了多种让它工作的方法。
在我的实际情况下,字符串位于我从数据库连接获得的数据框中,但我可以通过以下方式简化情况:
> strsplit("BLAAT12E:\BLAAT2\BLAAT3","\",fixed=TRUE)
[[1]]
[1] "BLAAT12E:" "BLAAT2" "BLAAT3"
> strsplit("BLAAT12E:\BLAAT2\BLAAT3","\",fixed=FALSE)
Error in strsplit("BLAAT12E:\BLAAT2\BLAAT3", "\", fixed = FALSE) :
invalid regular expression '\', reason 'Trailing backslash'
> strsplit("BLAAT12E:\BLAAT2\BLAAT3","\\",fixed=TRUE)
[[1]]
[1] "BLAAT12E:\BLAAT2\BLAAT3"
> strsplit("BLAAT12E:\BLAAT2\BLAAT3","\\",fixed=FALSE)
[[1]]
[1] "BLAAT12E:" "BLAAT2" "BLAAT3"
预期的输出也会在 BLAAT1 和 022E 之间的 \ 上拆分:
提前致谢
如果您将正则表达式与 strsplit
函数一起使用,则文字反斜杠可以编码为两个文字反斜杠(因为文字 \
是一种特殊的正则表达式元字符,用于形成正则表达式转义,如 \d
、\w
等),但由于 R 字符串文字支持字符串转义序列(如 "\r"
用于回车 return,"\n"
用于换行符) 文字反斜杠需要用双反斜杠定义。
所以,"\"
是一个文字 \
,一个匹配文字反斜杠字符的正则表达式模式,即 \
,应该用 4 个反斜杠编码,"\\"
.
这是您可以使用的正则表达式:它在 \
和 non-printable character:
处拆分
strsplit("BLAAT12E:\BLAAT2\BLAAT3","\\|[^[:print:]]",fixed=FALSE)
# [1] "BLAAT1" "E:" "BLAAT2" "BLAAT3"
我试图提取字符串中第一个反斜杠之前的部分,但我似乎无法让它正常工作。
根据 strsplit 的手册页并在网上搜索后,我尝试了多种让它工作的方法。
在我的实际情况下,字符串位于我从数据库连接获得的数据框中,但我可以通过以下方式简化情况:
> strsplit("BLAAT12E:\BLAAT2\BLAAT3","\",fixed=TRUE) [[1]] [1] "BLAAT12E:" "BLAAT2" "BLAAT3" > strsplit("BLAAT12E:\BLAAT2\BLAAT3","\",fixed=FALSE) Error in strsplit("BLAAT12E:\BLAAT2\BLAAT3", "\", fixed = FALSE) : invalid regular expression '\', reason 'Trailing backslash' > strsplit("BLAAT12E:\BLAAT2\BLAAT3","\\",fixed=TRUE) [[1]] [1] "BLAAT12E:\BLAAT2\BLAAT3" > strsplit("BLAAT12E:\BLAAT2\BLAAT3","\\",fixed=FALSE) [[1]] [1] "BLAAT12E:" "BLAAT2" "BLAAT3"
预期的输出也会在 BLAAT1 和 022E 之间的 \ 上拆分:
提前致谢
如果您将正则表达式与 strsplit
函数一起使用,则文字反斜杠可以编码为两个文字反斜杠(因为文字 \
是一种特殊的正则表达式元字符,用于形成正则表达式转义,如 \d
、\w
等),但由于 R 字符串文字支持字符串转义序列(如 "\r"
用于回车 return,"\n"
用于换行符) 文字反斜杠需要用双反斜杠定义。
所以,"\"
是一个文字 \
,一个匹配文字反斜杠字符的正则表达式模式,即 \
,应该用 4 个反斜杠编码,"\\"
.
这是您可以使用的正则表达式:它在 \
和 non-printable character:
strsplit("BLAAT12E:\BLAAT2\BLAAT3","\\|[^[:print:]]",fixed=FALSE)
# [1] "BLAAT1" "E:" "BLAAT2" "BLAAT3"