R中的正则表达式组捕获多个捕获
在R中,是否可以从正则表达式匹配中提取组捕获? 据我所知, grep
, grepl
, regexpr
, gregexpr
, sub
或gsub
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