如何在匹配模式之前删除字符并在R中匹配一行中的模式后?

时间:2017-09-24 04:25:18

标签: r

我有这个向量Target <- c( "tes_1123_SS1G_340T01", "tes_23_SS2G_340T021"。我想删除SS之前的任何东西以及T0之后的任何东西(包括T0)。 结果我想要一行代码:

SS1G_340 SS2G_340

我试过的代码: gsub("^.*?SS|\\T0", "", Target)

2 个答案:

答案 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可以帮助您入门。