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

如何在R中首次出现[和最后一次出现]之间捕获文本,r,regex,R,Regex,我需要在[]之间提取文本 我有这个: x <- "corp_applicaiton[CORP_webapp1][1]" 然后将所有特殊字符替换为分数不足的字符: 我试过这个: str_match(x, ".*\\[(.*?)].*")[,2] 但这会产生: 1 有什么想法吗?你可以用正则表达式来实现 x<-c("corp_applicaiton[CORP_webapp1][1]") x2 = sub(".*?\\[(.*)\\].*", "\\1", x) gsub("\\W"

我需要在[]之间提取文本

我有这个:

x <- "corp_applicaiton[CORP_webapp1][1]"
然后将所有特殊字符替换为分数不足的字符:

我试过这个:

str_match(x, ".*\\[(.*?)].*")[,2]
但这会产生:

1

有什么想法吗?

你可以用正则表达式来实现

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

x您可以使用正则表达式来实现这一点

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

取代 一美元二美元


您可以通过一个正则表达式实现所需的功能,但它仍然需要两个正则表达式:

> library(gsubfn)
> x<-c("corp_applicaiton[CORP_webapp1][1]")
> gsubfn("^[^[]*\\[(.*)].*$", function(m) gsub("\\W", "_", m), x)
[1] "CORP_webapp1__1"
>库(gsubfn)
>x gsubfn(“^[^[]*\\[(.*)].*$”,函数(m)gsub(“\\W”,“\ux”,m),x)
[1] “公司网络应用程序1”
它将查找以下模式:

  • ^
    -字符串的开头
  • [^[]*
    -0+字符,而非
    [
  • \\[
    -文字
    [
  • (.*)
    -第1组捕获尽可能多的0+个字符,直到最后一个
  • ]
    -文字
    ]
  • *
    -以及字符串末尾的任何0+字符

然后,内部带有
gsub(\\W“,”uu“,”m)
的嵌套回调函数将用组1值中的
替换每个非单词字符
(\W
),并且只返回该值。

您可以使用单个正则表达式实现所需的功能,但它仍然需要两个正则表达式:

> library(gsubfn)
> x<-c("corp_applicaiton[CORP_webapp1][1]")
> gsubfn("^[^[]*\\[(.*)].*$", function(m) gsub("\\W", "_", m), x)
[1] "CORP_webapp1__1"
>库(gsubfn)
>x gsubfn(“^[^[]*\\[(.*)].*$”,函数(m)gsub(“\\W”,“\ux”,m),x)
[1] “公司网络应用程序1”
它将查找以下模式:

  • ^
    -字符串的开头
  • [^[]*
    -0+字符,而非
    [
  • \\[
    -文字
    [
  • (.*)
    -第1组捕获尽可能多的0+个字符,直到最后一个
  • ]
    -文字
    ]
  • *
    -以及字符串末尾的任何0+字符

然后,内部带有
gsub(\\W“,”uu“,”m)
的嵌套回调函数将用组1值中的
替换每个非单词字符
(\W
),并且只返回该值。

@WiktorStribiżew,我想选择“CORP\u webapp1ż1”尝试
str\u extract
,然后尝试
str\u replace
。这个正则表达式怎么样(?:\[)。(?:\\])
有用吗?@WiktorStribiżew,我想选择“CORP\u webapp1\uu 1”尝试
str\u extract
,然后
str\u replace
。这个正则表达式怎么样(?:\[)。(?:\\[).\\])
有用吗?