从字符串中删除字符,使用正则表达式忽略第一个匹配

时间:2015-07-16 15:15:28

标签: regex r

如何使用正则表达式从字符串中除去第一场比赛之外的所有字符实例?在下面的示例数据中,我想保留第一个' - '并删除所有其他实例。

myvec <- c("12-34-5678-9", "ABC-DEF-GHI-JKL-MN", "9-8765", "a - defgh -- ijkl")

寻求的结果是:

"12-3456789"   "ABC-DEFGHIJKLMN"   "9-8765"   "a - defgh  ijkl"

我使用strsplit制定了一个解决方案并使用paste重建了这些向量,但我正在寻找一种正则表达式来满足我的好奇心。

2 个答案:

答案 0 :(得分:2)

您可以使用捕获组。

> myvec <- c("12-34-5678-9", "ABC-DEF-GHI-JKL-MN", "9-8765", "a - defgh -- ijkl")
> gsub("^([^-]*-)|-", "\\1", myvec)
[1] "12-3456789"      "ABC-DEFGHIJKLMN" "9-8765"         
[4] "a - defgh  ijkl"

答案 1 :(得分:2)

试试这个

 gsub('^[^-]+-(*SKIP)(*F)|-', '', myvec, perl=TRUE)
 #[1] "12-3456789"      "ABC-DEFGHIJKLMN" "9-8765"          "a - defgh  ijkl"