R删除字符串

时间:2016-12-05 18:01:44

标签: r gsub

我想删除字符' V' (始终是字符串中的最后一个)来自包含大量字符串的以下向量。它们看起来类似于以下示例:

str <- c("VDM 000 V2.1.1",
         "ABVC 001 V10.15.0",
         "ASDV 123 V1.20.0")

我知道它始终是最后一个&#39;我想删除。 我也知道这个字符是这些字符串中的第六个,第七个或第八个字符。

我真的无法想出一个好的解决方案。我知道我必须使用sub或gsub,但我只能删除所有的V而不是最后一个。

有人有想法吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

写入此正则表达式模式以匹配“V”,然后是5到7个其他非“V”字符。 “[...]”构造是一个“字符类”,在这种构造中,一个前导“^”会导致否定。 “{...} consturct允许两个数字指定最小和最大长度,”$“匹配长度为0的字符串结尾,我认为当你写下”第六,第七或第八个最后一个字符“时,它是所需的:

sub("(V)(.{5,7})$", "\\2", str)
[1] "VDM 000 2.1.1"    "ABVC 001 10.15.0" "ASDV 123 1.20.0" 

由于您只需要一次替换,我使用sub代替gsub

答案 1 :(得分:2)

您可以使用:

gsub("V(\\d+.\\d+.\\d+)$","\\1",str)
##[1] "VDM 000 2.1.1"    "ABVC 001 10.15.0" "ASDV 123 1.20.0" 

正则表达式V(\\d+.\\d+.\\d+)$匹配&#34;版本&#34;由角色组成&#34; V&#34;接着是由两个&#34;分隔的三组数字(即\\d+)。&#34;在字符串的末尾(即$)。 \\d+.\\d+.\\d+周围的括号提供了匹配中可由\\1引用的组。因此,gsub将替换整个匹配组,从而删除 &#34; V&#34;。

答案 2 :(得分:1)

由于您知道要从字符串中删除的最后一个V,请尝试使用此正则表达式V(?=[^V]*$)

gsub("V(?=[^V]*$)", "", str, perl = TRUE)
# [1] "VDM 000 2.1.1"    "ABVC 001 10.15.0" "ASDV 123 1.20.0" 

正则表达式匹配模式[^V]*$之前的V,它由字符串末尾的非V个字符组成,这可以保证匹配的V是最后一个V字符串。