我有这个向量Target <- c( "tes_1123_SS1G_340T01", "tes_23_SS2G_340T021"
。我想删除SS之前的任何东西以及T0之后的任何东西(包括T0)。
结果我想要一行代码:
SS1G_340
SS2G_340
我试过的代码:
gsub("^.*?SS|\\T0", "", Target)
答案 0 :(得分:3)
我们可以使用 <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="only characters allowed" ControlToValidate="txtShort" ValidationExpression="^[A-Za-z]*$" ></asp:RegularExpressionValidator>
str_extract
答案 1 :(得分:2)
试试这个:
gsub(".*(SS.*)T0.*","\\1",Target)
[1] "SS1G_340" "SS2G_340"
为什么会这样:
使用正则表达式,我们可以选择保留模式并通过两个步骤删除该模式之外的所有内容。第一步是将我们想要的模式放在括号中。第2步是引用我们想要保留的括号约束模式的数量,因为有时我们可能有多个括号绑定元素。请参阅以下示例:
gsub(".*(SS.*)+(T0.*)","\\1",Target)
[1] "SS1G_340" "SS2G_340"
请注意,我这次将T0。*放在括号中,但我们仍然得到了正确的答案,因为我告诉gsub返回两个括号中的第一个模式。但现在看看如果我使用\\ 2代替会发生什么:
gsub(".*(SS.*)+(T0.*)","\\2",Target)
[1] "T01" "T021"
顺便说一下。*是外卡。如果您想了解有关在R中使用正则表达式的更多信息,here's a reference可以帮助您入门。