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
Regex 基于前缀和后缀对字符串进行子集设置_Regex_R_Subset - Fatal编程技术网

Regex 基于前缀和后缀对字符串进行子集设置

Regex 基于前缀和后缀对字符串进行子集设置,regex,r,subset,Regex,R,Subset,我有一列包含以下类型的名称: sp_O00168_PLM_HUMAM sp_Q8N1D5_CA158_HUMAN sp_Q15818_NPTX1_HUMAN tr_Q6FGH5_Q6FGH5_HUMAN sp_Q9UJ99_CAD22_HUMAN 我想删除第二个之前的所有内容,包括第二个之后的所有内容,包括第三个 我不知道根据字符数删除哪些字符,因为这不是一个固定的数字 输出应为: PLM CA158 NPTX1 Q6FGH5 CAD22 我已经玩过

我有一列包含以下类型的名称:

sp_O00168_PLM_HUMAM   
sp_Q8N1D5_CA158_HUMAN  
sp_Q15818_NPTX1_HUMAN  
tr_Q6FGH5_Q6FGH5_HUMAN  
sp_Q9UJ99_CAD22_HUMAN  
我想删除第二个之前的所有内容,包括第二个之后的所有内容,包括第三个

我不知道根据字符数删除哪些字符,因为这不是一个固定的数字

输出应为:

PLM  
CA158    
NPTX1  
Q6FGH5  
CAD22
我已经玩过这些了,但还没完全弄对。。 图书馆架线工
str_subx,-6,-1

这不是编程术语中的一个子集,它是一个子串。为了提取部分字符串,您通常会使用几乎与语言无关的语言;在R中:

> gsub(".*_.*_(.*)_.*", "\\1", "sp_O00168_PLM_HUMAM") 
[1] "PLM"

1旁白:取子集,顾名思义,是一种集合操作,集合的定义是没有重复的元素,并且元素没有特定的顺序。相比之下,字符串是一个序列,它是一个非常不同的概念。

在编程术语1中,它不是真正的子集,而是一个子字符串。为了提取部分字符串,您通常会使用几乎与语言无关的语言;在R中:


1旁白:取子集,顾名思义,是一种集合操作,集合的定义是没有重复的元素,并且元素没有特定的顺序。相比之下,字符串是一个序列,这是一个非常不同的概念。

另一个可能的正则表达式是:

sub("^(?:.+_){2}(.+?)_.+", "\\1", vec)
# [1] "PLM"    "CA158"  "NPTX1"  "Q6FGH5" "CAD22" 
其中vec是字符串的向量

直观的解释:


另一个可能的正则表达式是:

sub("^(?:.+_){2}(.+?)_.+", "\\1", vec)
# [1] "PLM"    "CA158"  "NPTX1"  "Q6FGH5" "CAD22" 
其中vec是字符串的向量

直观的解释:


非常感谢。我最后的代码是:测试谢谢!我最后的代码是:测试谢谢你的澄清!谢谢你的澄清!给人印象深刻的谢谢,太棒了!非常感谢。