我有这个载体:
jvm<-c("test - PROD_DB_APP_185b@SERVER01" ,"uat - PROD_DB_APP_SYS[1]@SERVER2")
我需要提取文字直到&#34; [&#34;或者如果没有&#34; [&#34;,那么直到&#34; @&#34;字符。
结果应该是
PROD_DB_APP_185b
PROD_DB_APP_SYS
我尝试过这样的事情:
str_match(jvm, ".*\\-([^\\.]*)([.*)|(@.*)")
没有工作,有什么想法吗?
答案 0 :(得分:1)
基础R的sub
解决方案:
jvm<-c("test - PROD_DB_APP_185b@SERVER01" ,"uat - PROD_DB_APP_SYS[1]@SERVER2")
sub("^.*?\\s+-\\s+([^@[]+).*", "\\1", jvm)
<强>详情:
^
- 字符串开头.*?
- 尽可能少的0个字符\\s+-\\s+
- 用1个或多个空格括起来的连字符([^@[]+)
- 捕获与@
以外的任何一个或多个字符匹配的第1组
和[
.*
- 任何0+字符,直到字符串结尾。或str_extract
的 stringr 解决方案:
str_extract(jvm, "(?<=-\\s)[^@\\[]+")
请参阅regex demo
<强>详情:
(?<=-\\s)
- 一个正面的lookbehind,匹配一个前面带有-
的空字符串和一个紧靠当前位置左侧的空格[^@\\[]+
- 除@
和[
以外的1个或多个字符。