我真的花时间学习正则表达式,我正在玩不同的玩具场景.我无法工作的一个设置是从字符串的开头抓取到n出现的字符,其中n> 1.
在这里,我可以从字符串的开头抓到第一个下划线,但我不能将其概括为第二个或第三个下划线.
x <- c("a_b_c_d","1_2_3_4","<_?_._:") gsub("_.*$","",x) Here's what I'm trying to achieve with regex. (`sub`/`gsub`): ## > sapply(lapply(strsplit(x,"_"),"[",1:2),paste,collapse="_") ## [1] "a_b" "1_2" "<_?" #or ## > sapply(lapply(strsplit(x,1:3),collapse="_") ## [1] "a_b_c" "1_2_3" "<_?_."
怎么样:
gsub('^(.+_.+?).*$','\\1',x) # [1] "a_b" "1_2" "<_?"
或者,您可以使用{}来表示重复次数……
sub('((.+_){1}.+?).*$',x) # {0} will give "a",{1} - "a_b",{2} - "a_b_c" and so on
所以如果你想匹配第n个,你就不必重复自己……