Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的某些字符之间提取文本_R_Regex - Fatal编程技术网

在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捕获除
    @
    以外的一个或多个字符
R演示:

> 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]