R正则表达式:在引号之间隔离字符串
R regular expression: isolate a string between quotes
我有一个字符串 myFunction(arg1=\"hop\",arg2=TRUE)
。我想隔离引号之间的内容(本例中为 \"hop\"
)
到目前为止我已经尝试过但没有成功:
gsub(pattern="(myFunction)(\({1}))(.*)(\\"{1}.*\\"{1})(.*)(\){1})",replacement="//4",x="myFunction(arg1=\"hop\",arg2=TRUE)")
欢迎正则表达式专家提供任何帮助!
尝试
sub('[^\"]+\"([^\"]+).*', '\1', x)
#[1] "hop"
或者
sub('[^\"]+(\"[^\"]+.).*', '\1', x)
#[1] "\"hop\""
不需要 \"
,因为 "
也可以
sub('[^"]*("[^"]*.).*', '\1', x)
#[1] "\"hop\""
如果有多个匹配项,正如@AvinashRaj 在他的 post 中提到的那样,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)"
x <- "myFunction(arg1=\"hop\",arg2=TRUE)"
unlist(strsplit(x,'"'))[2]
# [1] "hop"
你可以试试:
str='myFunction(arg1=\"hop\",arg2=TRUE)'
gsub('.*(\".*\").*','\1',str)
#[1] "\"hop\""
您也可以使用 regmatches
功能。 Sub 或 gsub 仅适用于特定输入,对于一般情况,您必须抓取而不是移除。
> 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"
我有一个字符串 myFunction(arg1=\"hop\",arg2=TRUE)
。我想隔离引号之间的内容(本例中为 \"hop\"
)
到目前为止我已经尝试过但没有成功:
gsub(pattern="(myFunction)(\({1}))(.*)(\\"{1}.*\\"{1})(.*)(\){1})",replacement="//4",x="myFunction(arg1=\"hop\",arg2=TRUE)")
欢迎正则表达式专家提供任何帮助!
尝试
sub('[^\"]+\"([^\"]+).*', '\1', x)
#[1] "hop"
或者
sub('[^\"]+(\"[^\"]+.).*', '\1', x)
#[1] "\"hop\""
不需要 \"
,因为 "
也可以
sub('[^"]*("[^"]*.).*', '\1', x)
#[1] "\"hop\""
如果有多个匹配项,正如@AvinashRaj 在他的 post 中提到的那样,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)"
x <- "myFunction(arg1=\"hop\",arg2=TRUE)"
unlist(strsplit(x,'"'))[2]
# [1] "hop"
你可以试试:
str='myFunction(arg1=\"hop\",arg2=TRUE)'
gsub('.*(\".*\").*','\1',str)
#[1] "\"hop\""
您也可以使用 regmatches
功能。 Sub 或 gsub 仅适用于特定输入,对于一般情况,您必须抓取而不是移除。
> 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"