替换第3次出现的“ - ”和"之间的所有字符:"在向量的每个元素中

时间:2017-01-13 12:50:56

标签: r regex substring gsub

以下是我要做的事情:

给定一个字符串,我想在第三次出现之后删除所有内容 - ' - '和角色 - 假设有第三次出现,可能没有。

这是我的预期结果:

visibilityOfElementLocated

任何帮助?

4 个答案:

答案 0 :(得分:1)

我们匹配两个不是-后跟-[^-]+-)的字符实例,后跟另一组不是-的字符,捕获它作为一个组,即在()内,后跟一个-和一组不是:[^:]+)的字符,后跟以{开头的第二个捕获组{1}}(:)并将其替换为捕获组的反向引用

(:.*)

数据

sub("(([^-]+-){2}[^-]+)-*[^:]+(:.*)", "\\1\\3", str1)
#[1] "yy-aa-bbb:HYT"  "yy-aa-vvv:ZTR"  "yy-aa-ddd:YTLM"

答案 1 :(得分:1)

gsub('(.*-.*-.*)\\-.*(\\:.*)','\\1\\2',string)
#[1] "yy-aa-bbb:HYT"  "yy-aa-vvv:ZTR"  "yy-aa-ddd:YTLM"

答案 2 :(得分:0)

将前两个字段和之后的所有字段匹配到冒号,并将其替换为前两个字段和冒号。请注意,\w匹配任何单词字符,而\需要在"..."内加倍:

sub("(\\w+-\\w+)-.+:", "\\1:", xx)
## [1] "yy-aa-bbb:HYT" "yy-aa-vvv:ZTR" "yy-aa:YTLM"   

注意:可重复形式的输入xx为:

xx <- c("yy-aa-bbb-cccc1:HYT", "yy-aa-vvv-vv:ZTR", "yy-aa-ddd:YTLM")

答案 3 :(得分:0)

在那里抛出一个stringi解决方案。

library(stringi)

sub('_.*:' ,':', stri_replace_last_fixed(x, '-', '_'))
#[1] "yy-aa-bbb:HYT" "yy-aa-vvv:ZTR" "yy-aa:YTLM"