使用正则表达式从R中提取字符串

时间:2017-07-19 18:58:19

标签: r regex

我有这个载体:

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, ".*\\-([^\\.]*)([.*)|(@.*)")

没有工作,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

基础R的sub解决方案:

jvm<-c("test - PROD_DB_APP_185b@SERVER01" ,"uat - PROD_DB_APP_SYS[1]@SERVER2")
sub("^.*?\\s+-\\s+([^@[]+).*", "\\1", jvm)

请参阅online R demo

<强>详情:

  • ^ - 字符串开头
  • .*? - 尽可能少的0个字符
  • \\s+-\\s+ - 用1个或多个空格括起来的连字符
  • ([^@[]+) - 捕获与@以外的任何一个或多个字符匹配的第1组 和[
  • .* - 任何0+字符,直到字符串结尾。

str_extract stringr 解决方案:

str_extract(jvm, "(?<=-\\s)[^@\\[]+")

请参阅regex demo

<强>详情:

  • (?<=-\\s) - 一个正面的lookbehind,匹配一个前面带有-的空字符串和一个紧靠当前位置左侧的空格
  • [^@\\[]+ - 除@[以外的1个或多个字符。