R语言中用strsplit按竖线分隔符分割字符串遇异常问题
解决strsplit按竖线"|"分割时拆分每个字符的问题
哦这个坑我踩过好多次!你遇到的问题根源在于**|是正则表达式里的特殊字符**,而strsplit()的split参数默认是按正则模式解析的。
为什么会拆分每个字符?
在正则表达式中,|表示“逻辑或”的意思,比如a|b会匹配a或者b。当你直接传入"|"作为分隔符时,正则引擎会把它理解为“匹配空字符串 OR 空字符串”,相当于在每个字符的前后都匹配一次分隔符,自然就把每个字符都拆分开了。
两种正确的解决方法
方法1:使用fixed=TRUE强制字面匹配
告诉strsplit()不要把分隔符当成正则,而是直接匹配字面意义的竖线:
line <- "2015-07-22|06:43:44+0000|37e86ffa-dd28-450d-aa9a-3d6776a31337|dummy|t1|USA-4DTV-DEFAULT|USA|MV000375100000|Striking Distance|MOVIE|TMS|VIEWED_MOVIE|NA|NA|NA|NA|**" split_result <- strsplit(line, "|", fixed = TRUE)[[1]] # 查看结果 split_result
方法2:转义正则特殊字符
在R中,要在正则里表示字面的|,需要用双反斜杠\\转义(因为单个反斜杠在R字符串里是转义符本身):
split_result <- strsplit(line, "\\|")[[1]]
小提示
如果你的分隔符是普通符号(比如逗号、竖线、点号这类),优先用fixed=TRUE,这样不仅避免正则的坑,运行效率也会更高哦~
内容的提问来源于stack exchange,提问作者Sarang Manjrekar




