我需要从以下字符串中捕获TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]
,基本上从-
到@
符号。
i<-c("Current CPU load - TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]@example1.com")
我试过这个:
str_match(i, ".*-([^\\.]*)\\@.*")[,2]
我得到NA,有什么想法吗?
答案 0 :(得分:4)
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"
答案 1 :(得分:2)
您可以使用
-\s*([^@]+)
请参阅regex demo
<强>详情:
-
- 连字符\s*
- 零个或多个空格([^@]+)
- 第1组捕获除@
以外的1个或多个字符。R demo:
> 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]"
相同的模式可以与基础R regmatches
/ regexec
:
> regmatches(i, regexec("-\\s*([^@]+)", i))[[1]][2]
[1] "TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]"
如果您更喜欢替换方法,可以使用sub
:
> sub(".*?-\\s*([^@]+).*", "\\1", i)
[1] "TEST_WF1_CORP[-application-com.ibm.ws.runtime.WsServer]"
此处.*?
匹配任何0+字符,尽可能少,直到第一个-
,然后-
,0 +空格(\\s*
),然后除@
以外的1个字符被捕获到组1中(请参阅([^@]+)
),然后.*
匹配字符串的其余部分。替换模式中的\1
将组1的内容放回替换结果中。
答案 2 :(得分:2)
以下内容应该有效:
lrwxrwxrwx 1 root root 12 Mar 9 2016 e113c810.0 -> Certigna.pem
lrwxrwxrwx 1 root root 25 Mar 9 2016 e18bfb83.0 -> QuoVadis_Root_CA_3_G3.pem
lrwxrwxrwx 1 root root 36 Mar 9 2016 e268a4c5.0 -> AddTrust_Low-Value_Services_Root.pem
lrwxrwxrwx 1 root root 49 Mar 9 2016 e2799e36.0 -> GeoTrust_Primary_Certification_Authority_-_G3.pem
lrwxrwxrwx 1 root root 25 Mar 9 2016 e36a6752.0 -> Atos_TrustedRoot_2011.pem
lrwxrwxrwx 1 root root 25 Mar 9 2016 e442e424.0 -> QuoVadis_Root_CA_3_G3.pem