我希望R中的sub的正则表达式替换第n次出现的字符串中的字符“;”在该字符串中,其中n是传递给正则表达式的变量号。
stringA="a; b; c; d; e; f; g; h; i; j;"
stringB<-sub("^(;){4}.*", "", stringA)
##---------------^My attempt at a regular expression here-------
期望的输出:
stringB
"a; b; c; d;"
答案 0 :(得分:6)
您可以使用以下正则表达式:
^((?:[^;]*;){4}).*
匹配:
^
- 字符串开头((?:[^;]*;){4})
- (组1)捕获包含4(或您通过s
变量传递的任何数字)出现的子字符串
[^;]*
- 除;
;
- 字面分号.*
- 0个或更多字符,尽可能多在替换模式中使用反向引用\\1
,我们恢复结果中的前导子字符串。
请参阅IDEONE demo(此处,限制阈值以字符串形式传递):
stringA="a; b; c; d; e; f; g; h; i; j;"
s <- "4"
stringB <- sub(sprintf("^((?:[^;]*;){%s}).*", s), "\\1", stringA)
stringB
## "a; b; c; d;"
或者,如果传递整数值
s <- 4
sub(sprintf("^((?:[^;]*;){%d}).*", s), "\\1", stringA)
请参阅another demo