捕获特殊字符之间的字符串

时间:2017-07-28 14:32:53

标签: r regex

我有这个字符串:

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]

任何想法?

3 个答案:

答案 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]"