在base R中如何删除字符串首个反斜杠及之后的所有内容?
解决方案
首先要明确R语言中字符串反斜杠的特殊规则:
反斜杠是R字符串的默认转义字符,如果你需要在字符串中存储字面意义的反斜杠,定义时必须写两个反斜杠。例如你要表示100\abc,代码中要写为"100\\abc"。你示例中直接写的"100\abc"会被R识别为100加响铃转义符\a加bc,字符串里根本不存在字面反斜杠,自然匹配不到。
首先修正字符向量的定义,再使用sub函数匹配即可:
# 正确定义包含字面反斜杠的字符向量 myString <- c("5", "10", "100\\abc\\nx1\\n1") # 匹配第一个反斜杠及之后所有内容,替换为空 result <- sub("\\\\.*", "", myString) # 查看结果 result
输出结果:
[1] "5" "10" "100"
原代码错误原因
你测试的几个代码的问题分别是:
gsub("\\\\*", "", myString):仅匹配任意数量的连续反斜杠并删除,不会删除反斜杠之后的内容gsub('\\"', "", myString, fixed = TRUE):匹配的是双引号,和你的需求完全无关gsub("\\.*","", myString):匹配任意数量的点号删除,和反斜杠没有关联
你试过的sub("\\\\.*", "", myString)逻辑本身是正确的,之所以没生效就是因为你定义字符串时没有正确转义反斜杠,导致目标字符串中没有可匹配的反斜杠字符。
内容的提问来源于stack exchange,提问作者Electrino
相关产品推荐
相关产品推荐

