R正则表达式:在引号之间隔离一个字符串

时间:2015-04-08 07:53:14

标签: regex r quotes

我有一个字符串myFunction(arg1=\"hop\",arg2=TRUE)。我想隔离引号之间的内容(本例中为\"hop\"

到目前为止我没有尝试过:

gsub(pattern="(myFunction)(\\({1}))(.*)(\\\"{1}.*\\\"{1})(.*)(\\){1})",replacement="//4",x="myFunction(arg1=\"hop\",arg2=TRUE)")

欢迎任何正则表达式大师的帮助!

4 个答案:

答案 0 :(得分:10)

尝试

 sub('[^\"]+\"([^\"]+).*', '\\1', x)
 #[1] "hop"

或者

 sub('[^\"]+(\"[^\"]+.).*', '\\1', x)
 #[1] "\"hop\""

\"不需要"

 sub('[^"]*("[^"]*.).*', '\\1', x)
 #[1] "\"hop\""

如果有多个匹配,正如@AvinashRaj在帖子中提到的那样,sub可能没那么有用。使用stringi的选项将是

 library(stringi)
 stri_extract_all_regex(x1, '"[^"]*"')[[1]]
 #[1] "\"hop\""  "\"hop2\""

数据

 x <- "myFunction(arg1=\"hop\",arg2=TRUE)"
 x1 <- "myFunction(arg1=\"hop\",arg2=TRUE arg3=\"hop2\", arg4=TRUE)"

答案 1 :(得分:7)

您也可以使用regmatches功能。 Sub或gsub仅适用于特定输入,一般情况下,您必须进行grabing而不是删除。

> x <- "myFunction(arg1=\"hop\",arg2=TRUE)"
> regmatches(x, gregexpr('"[^"]*"', x))[[1]]
[1] "\"hop\""

要仅获取引号内的文本,然后将上述函数的结果传递给gsub函数,该函数有助于删除引号。

> x <- "myFunction(arg1=\"hop\",arg2=TRUE)"
> gsub('"', '', regmatches(x, gregexpr('"([^"]*)"', x))[[1]])
[1] "hop"
> x <- "myFunction(arg1=\"hop\",arg2=\"TRUE\")"
> gsub('"', '', regmatches(x, gregexpr('"([^"]*)"', x))[[1]])
[1] "hop"  "TRUE"

答案 2 :(得分:3)

您可以尝试:

str='myFunction(arg1=\"hop\",arg2=TRUE)'

gsub('.*(\\".*\\").*','\\1',str)
#[1] "\"hop\""

答案 3 :(得分:1)

x <- "myFunction(arg1=\"hop\",arg2=TRUE)"
unlist(strsplit(x,'"'))[2]
# [1] "hop"