在R中的某些字符之间提取文本
我需要从以下字符串中捕获在R中的某些字符之间提取文本,r,regex,R,Regex,我需要从以下字符串中捕获TEST\u WF1\u CORP[-application com.ibm.ws.runtime.WsServer],基本上是从-到@符号 i<-c("Current CPU load - TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]@example1.com") 我收到了,有什么想法吗?你可以用 -\s*([^@]+) 见 详细信息: --连字符 \s*-零个或多个空格 ([^@]+)-组1
TEST\u WF1\u CORP[-application com.ibm.ws.runtime.WsServer]
,基本上是从-
到@
符号
i<-c("Current CPU load - TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]@example1.com")
我收到了,有什么想法吗?你可以用
-\s*([^@]+)
见
详细信息:
-连字符-
-零个或多个空格\s*
-组1捕获除([^@]+)
以外的一个或多个字符@
> library(stringr)
> i<-c("Current CPU load - TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]@example1.com")
> str_match(i, "-\\s*([^@]+)")[,2]
[1] "TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]"
如果您喜欢替换方法,可以使用子项
:
> sub(".*?-\\s*([^@]+).*", "\\1", i)
[1] "TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]"
这里,*?
匹配任何0+字符,尽可能少,直到第一个-
,然后-
,0+空格(\\s*
),然后将@
以外的1+字符捕获到组1中(请参见([^@]+)
),然后*
匹配字符串的其余部分。替换模式中的\1
将组1的内容放回到替换结果中。1)gsub用零长度字符串替换-
之前和之后的所有内容,即-
,以及-
之后和之后的所有内容。无需软件包:
gsub(".* - |@.*", "", i)
## "TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]"
2)sub这也会起作用。它将所有内容与空格、减号、空格(即*-
)相匹配,然后捕获所有内容,直到@
(即(.*)
),然后再捕获剩余内容(*
),并用捕获组(即parens中的部分)替换。它也不使用包
sub(".*- (.*)@.*", "\\1", i)
## [1] "TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]"
注意:我们将其用作输入i
:
i <- "Current CPU load - TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]@example1.com"
i以下各项应起作用:
extract <- unlist(strsplit(i,"- |@"))[2]
<代码>提取尝试>代码> *.*(**)@ */COD>请考虑接受对你最有效的答案(见),并对那些对你有帮助的建议进行投票。如果您需要更多说明,请告知。请注意,stringr解决方案在处理NA值方面非常出色,regmatches
有问题(您需要更多的代码),如果没有匹配,sub
将只返回原始字符串。
i <- "Current CPU load - TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]@example1.com"
extract <- unlist(strsplit(i,"- |@"))[2]