Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除某些“";之前的字符串&引用;R_R_Regex_String_Parsing - Fatal编程技术网

删除某些“";之前的字符串&引用;R

删除某些“";之前的字符串&引用;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

如何删除第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(
    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"