你如何提取R中两个字符之间的值?
我试图使用正则表达式来提取此字符串R中的服务器名称(server101):之间你如何提取R中两个字符之间的值?
值@和下面的第一期间
t<-c("Current CPU load - jvm machine[example network-app_svc_group_mem4]@server101.example.com")
I”(。)我试过这个:
gsub('.*\\@(\\d+),(\\d+).*', '\\1', t)
这似乎没有工作,任何想法?
与stringr:
library(stringr)
str_match(t, ".*@([^\\.]*)\\..*")[2]
#[1] "server101"
仅供参考:'str_match'并不需要一个完整的字符串匹配。此外,字符类中的点被视为字面点,不需要转义。由于'@'后面有一些值,我认为'+'(出现1次或多次)比'*'(零次或多次出现)更具逻辑性。因此,我将'str_match'使用以下模式:'“@([^。] +)”'。 –
感谢@WiktorStribiżew的信息,非常感谢。 –
您可以使用下面的基础R代码来提取所述第一@
后比.
([^.]+
)其他1+字符:
> t <- "Current CPU load - jvm machine[example network-app_svc_group_mem4]@server101.example.com"
> pattern="@([^.]+)"
> m <- regmatches(t,regexec(pattern,t))
> result = unlist(m)[2]
> result
[1] "server101"
随着regexec
,可以访问子集(捕获组内容)。
另一种方法是使用regmatches
/regexpr
有PCRE与(?<[email protected])
回顾后,仅该字符存在的检查,但并没有把字符到匹配的正则表达式:
> result2 <- regmatches(t, regexpr("(?<[email protected])[^.]+", t, perl=TRUE))
> result2
[1] "server101"
一个干净的stringr的方法将是使用相同的PCRE正则表达式与str_extract
(使用类似的(因为它也支持lookarounds),ICU,正则表达式):
> library(stringr)
> t<-c("Current CPU load - jvm machine[example network-app_svc_group_mem4]@server101.example.com")
> str_extract(t, "(?<[email protected])[^.]+")
[1] "server101"
'GSUB( '@([^] +)|', '\\ 1',T)' – rawr