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

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


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


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

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


慕桂英4014372
浏览 835回答 3
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"    

慕森王

gsub从您的示例执行此操作:gsub("\\((.*?) :: (0\\.[0-9]+)\\)","\\1 \\2", "(sometext :: 0.1231313213)")[1] "sometext 0.1231313213"您需要对引号中的\ s进行两次转义,然后它们才能使用正则表达式。希望这可以帮助。
打开App,查看更多内容
随时随地看视频慕课网APP