为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

在R中,是否可以从正则表达式匹配中提取组捕获?据我所知,没有一个grep,grepl,regexpr,gregexpr,sub,或gsub返回组捕获。


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


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

我总是可以做多个完全匹配的抓图,或者做一些外部(非R)处理,但我希望可以在R中完成所有这些工作。是否有提供此功能的函数或程序包?


查看完整描述

3 回答

?
墨色风雨

str_match(),从stringr包装中执行此操作。它返回一个字符矩阵,其中匹配项中的每个组都有一列(整个匹配项中有一列):


> 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"    


查看完整回答
反对 回复 2019-12-25
?
慕森王

gsub从您的示例执行此操作:


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

[1] "sometext 0.1231313213"

您需要对引号中的\ s进行两次转义,然后它们才能使用正则表达式。


希望这可以帮助。


查看完整回答
反对 回复 2019-12-25
?
德玛西亚99

尝试regmatches()和regexec():


regmatches("(sometext :: 0.1231313213)",regexec("\\((.*?) :: (0\\.[0-9]+)\\)","(sometext :: 0.1231313213)"))

[[1]]

[1] "(sometext :: 0.1231313213)" "sometext"                   "0.1231313213"


查看完整回答
反对 回复 2019-12-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信