如何在R中首次出现[和最后出现]之间捕获文本

时间:2017-08-04 21:20:08

标签: r regex

我需要在[],

之间加密文字

我有这个:

x <- "corp_applicaiton[CORP_webapp1][1]"

我需要捕捉这段文字:

CORP_webapp1][1

然后将所有特殊字符替换为低分:

我试过这个:

str_match(x, ".*\\[(.*?)].*")[,2]

但是输出:

1

任何想法?

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式执行此操作。

x<-c("corp_applicaiton[CORP_webapp1][1]")
x2 = sub(".*?\\[(.*)\\].*", "\\1", x)
gsub("\\W", "_", x2)
[1] "CORP_webapp1__1"

答案 1 :(得分:0)

.+\[(.+)\]\[(.+)\]

替换为 $ $ 1_ 2

https://regex101.com/r/3BNz8j/1

答案 2 :(得分:0)

您可以通过单个gsubfn实现所需,但仍需要2个正则表达式:

> library(gsubfn)
> x<-c("corp_applicaiton[CORP_webapp1][1]")
> gsubfn("^[^[]*\\[(.*)].*$", function(m) gsub("\\W", "_", m), x)
[1] "CORP_webapp1__1"

它将寻找以下模式:

  • ^ - 字符串开头
  • [^[]* - 除[
  • 以外的0个字符
  • \\[ - 文字[
  • (.*) - 第1组尽可能多地捕获任何0+字符...
  • ] - 文字]
  • .* - 以及字符串结尾的任何0+字符。

然后,内置gsub("\\W", "_", m)的嵌套回调函数将使用Group 1值中的(\W替换每个非单词char _},并且只返回该值。 / p>