删除某些“";之前的字符串&引用;R
如何删除第6点后的字符串,同时在第6点后包含第一个值 示例字符串:删除某些“";之前的字符串&引用;R,r,regex,string,parsing,R,Regex,String,Parsing,如何删除第6点后的字符串,同时在第6点后包含第一个值 示例字符串: data <- c("A.5.MD.c3.M.5.20.M.5.20b_targ.sco.ab" , "A.5.MD.c3.M.5.21_targ.sco.ab") data正则表达式方式: desired.data = sub('(([^.]+\\.){6}[^.]+).*','\\1',data) 无法通过以下方式记住正则表达式: desired.data = unlist( lapply( strsp
data <- c("A.5.MD.c3.M.5.20.M.5.20b_targ.sco.ab" , "A.5.MD.c3.M.5.21_targ.sco.ab")
data正则表达式方式:
desired.data = sub('(([^.]+\\.){6}[^.]+).*','\\1',data)
无法通过以下方式记住正则表达式:
desired.data = unlist(
lapply(
strsplit(data,'.',fixed=T),
function(x) paste0(x[1:7],collapse='.')
)
)
在您的问题中,您所需的输出也从第七个分隔的组中删除了“\u targ”,但您没有提到您认为应该使用什么隐式规则,因此我假设您不喜欢字符串“\u targ”,并在这个后处理步骤中将其删除:
desired.data = sub('_targ','',desired.data,fixed=T)
或删除所有u*:
desired.data = gsub('_[^.]+','',desired.data)
您可以使用sub(^((?:[^.]*\\\){6}\\d*).*,“\\1”,data)
。这种模式得到了更好的解释
这基本上捕获可选的*
非句点字符[^.]*
和句点\.
六次{6}
的组合,还捕获第六个句点之后任何可能的尾随数字\\d*
。更简洁地说,它抓取了第6个周期(含第6个周期)之前的所有内容,以及紧接第6个周期之后的数字
sub("^((?:[^.]*\\.){6}\\d*).*", "\\1", data)
[1] "A.5.MD.c3.M.5.20" "A.5.MD.c3.M.5.21"
这回答了你的问题吗。在您的例子中--看起来像sub(^((?:[^.]*\\\){6}\\d+.*”,“\\1”,data)
而且,\u targ
在第七个点之前。你想把它包括在内吗?让我用一种更好的方式更新。你也尝试过我发布的sub()
regex了吗?我向捕获组添加了数字\\d+
(用括号捕获,使用“\\1”
返回)。它对我有效,但如果对你无效,请告诉我。@Andrew这解决了难题。谢谢你抽出时间!:)如果你在这里张贴,我会接受它作为正确的。
sub("^((?:[^.]*\\.){6}\\d*).*", "\\1", data)
[1] "A.5.MD.c3.M.5.20" "A.5.MD.c3.M.5.21"