我有这个字符串:
node<-c("Current CPU load - UAT_jvm1[mainnetwork-cmod_svc_group_mem1]@tt11")
我需要从中捕获此文本,从“ - ”到“@”符号。
UAT_jvm1[mainnetwork-cmod_svc_group_mem1]
我试过这个:
str_match(node, ".*\\-+s(.*?)@.*")[,2]
任何想法?
答案 0 :(得分:1)
我们可以使用gsub
匹配零个或多个字符,直到-
后跟空格或|
@
后跟其他字符,并将其替换为空格({ {1}})
""
或者如果我们使用gsub(".*-\\s|@.*", "", node)
#[1] "UAT_jvm1[mainnetwork-cmod_svc_group_mem1]"
stringr
library(stringr)
str_extract(node, "(?<=-\\s)[^@]+")
#[1] "UAT_jvm1[mainnetwork-cmod_svc_group_mem1]"
答案 1 :(得分:1)
这里有几个想法,
1)如here所示使用regmatches
,即
regmatches(node,gregexpr("(?<=-\\s).*?(?=@)", node, perl=TRUE))
2)使用word
中的有趣函数stringr
,即
stringr::word(node, 2, sep = ' - |@')
两者都导致
[1] "UAT_jvm1[mainnetwork-cmod_svc_group_mem1]"
答案 2 :(得分:1)
以下是一些方法。没有包使用。
1)sub 将所有内容与减号空间匹配,然后捕获所有内容但不包括@:
sub(".*- (.*)@.*", "\\1", node)
## [1] "UAT_jvm1[mainnetwork-cmod_svc_group_mem1]"
2)sub / read.table 用@替换第一个 - 然后读取挑出第二个字段的字符串。
read.table(text = sub("-", "@", node), sep = "@", as.is = TRUE, strip.white = TRUE)[[2]]
## [1] "UAT_jvm1[mainnetwork-cmod_svc_group_mem1]"
3)gsub 将所有内容移至减号空间,并从@开始删除所有内容:
gsub("^.*- |@.*", "", node)
## [1] "UAT_jvm1[mainnetwork-cmod_svc_group_mem1]"