R中的正则表达式组捕获多个捕获

在R中,是否可以从正则表达式匹配中提取组捕获? 据我所知, grepgreplregexprgregexprsubgsub gregexpr返回组捕获。

我需要从编码的字符串中提取键值对:

((.*?) :: (0.[0-9]+))

我总是可以做多个完全匹配greps,或者做一些外部(非R)处理,但是我希望我可以在R中完成所有工作。是否有一个函数或者一个包提供这样的函数来执行此操作?


来自stringr包的str_match()将执行此操作。 它为匹配中的每个组返回一个字符矩阵(对于整个匹配中的一个):

> s = c("(sometext :: 0.1231313213)", "(moretext :: 0.111222)")
> str_match(s, "((.*?) :: (0.[0-9]+))")
     [,1]                         [,2]       [,3]          
[1,] "(sometext :: 0.1231313213)" "sometext" "0.1231313213"
[2,] "(moretext :: 0.111222)"     "moretext" "0.111222"    

gsub这样做,从你的例子:

gsub("((.*?) :: (0.[0-9]+))","1 2", "(sometext :: 0.1231313213)")
[1] "sometext 0.1231313213"

你需要在报价中加倍转义然后他们为正则表达式工作。

希望这可以帮助。


尝试regmatches()regexec()

regmatches("(sometext :: 0.1231313213)",regexec("((.*?) :: (0.[0-9]+))","(sometext :: 0.1231313213)"))
[[1]]
[1] "(sometext :: 0.1231313213)" "sometext"                   "0.1231313213"
链接地址: http://www.djcxy.com/p/74781.html

上一篇: Regex group capture in R with multiple capture

下一篇: line regex greedy group