s <- "1-343-43Hello_2_323.14_fdh-99H"
Run Code Online (Sandbox Code Playgroud)
在RI中想要使用正则表达式来获取子串,比如说第二个下划线.如何使用一个正则表达式完成这项工作?另一种方法是用'_'分割然后粘贴前两个 - 一些东西;
paste(sapply(strsplit(s, "_"),"[", 1:2), collapse = "_")
Run Code Online (Sandbox Code Playgroud)
得到:
[1] "1-343-43Hello_2"
Run Code Online (Sandbox Code Playgroud)
但是我如何制作正则表达式来做同样的事情呢?
一般来说,对于回答标题中的问题,是
sub("^(([^_]*_){n}[^_]*).*", "\\1", s)
Run Code Online (Sandbox Code Playgroud)
您允许n的数量在哪里_.
您可以使用sub:
sub("^([^_]*_[^_]*).*", "\\1", s)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
s <- "1-343-43Hello_2_323.14_fdh-99H"
sub("^([^_]*_[^_]*).*", "\\1", s)
## => [1] "1-343-43Hello_2"
Run Code Online (Sandbox Code Playgroud)
图案详情:
^- 字符串的开头([^_]*_[^_]*)- 第 1 组捕获除 之外的 0+ 个字符_,然后是 a _,再次捕获 0+ 个非_s.*- 字符串的其余部分(请注意,TRE 正则表达式.也匹配换行符)。替换\\1仅返回组 1 内的值。