在R中,是否可以从正则表达式匹配中提取组捕获?据我所知,没有一个grep,grepl,regexpr,gregexpr,sub,或gsub返回组捕获。我需要从这样编码的字符串中提取键值对:\((.*?) :: (0\.[0-9]+)\)我总是可以做多个完全匹配的抓图,或者做一些外部(非R)处理,但我希望可以在R中完成所有这些工作。是否有提供此功能的函数或程序包?
3 回答
墨色风雨
TA贡献1853条经验 获得超6个赞
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"
慕森王
TA贡献1777条经验 获得超3个赞
gsub从您的示例执行此操作:
gsub("\\((.*?) :: (0\\.[0-9]+)\\)","\\1 \\2", "(sometext :: 0.1231313213)")
[1] "sometext 0.1231313213"
您需要对引号中的\ s进行两次转义,然后它们才能使用正则表达式。
希望这可以帮助。
- 3 回答
- 0 关注
- 896 浏览
添加回答
举报
0/150
提交
取消