【发布时间】:2015-03-19 22:08:40
【问题描述】:
我在 R 中有以下向量:
x <- c("id: capture this , something: the useless chunk , otherstuff: useless , more stuff")
我想得到字符串“capture this”。 我用过这个正则表达式:
library(rex)
r <- rex(
start,
anything,
"id: ",
capture(anything),
" , ",
anything
)
r
# > r
# > ^.*id: (.*) , .*
re_matches(x,r)
但我得到的是:
> re_matches(x,r)
1
1 capture this , something: the useless chunk , otherstuff: useless
它捕获了我想要的内容,也捕获了字符串的其余部分。我只想要“捕获这个”字段。 即使我使用 gsub 功能:
gsub("^.*id: (.*) , .*", "\\1", x)
使用相同的正则表达式我得到了相同的结果。
这是R的信息: R 版本 3.1.3 (2015-03-09) -- “Smooth Sidewalk” 版权所有 (C) 2015 统计计算 R 基金会 平台:x86_64-pc-linux-gnu (64-bit)
还有 ubuntu 的版本: 没有可用的 LSB 模块。 经销商编号:Ubuntu 说明:Ubuntu 14.04.2 LTS 发布:14.04 代号:信任
【问题讨论】:
-
您的“R 中的向量”,命名为:r 是单个字符串。 “rex”和“re_matches”函数从何而来?
-
它们来自“rex”包。我使用 rex 函数来构建 "^.*id: (.*) , .* " 表达式和 re_matches 以获得结果。如果我使用,我得到了相同的结果: gsub("^.*id: (.*) , .*", "\\1", x)
-
请提供完整的自包含代码示例。缺少
library调用。 -
您可能会发现充分学习正则表达式以避免需要“rex”包提供的帮助很有用。对我(和其他人,我怀疑)这是程序员和问题之间的一个障碍。
-
谢谢你的建议,你是对的。我目前正在使用这个包,因为我想构建更大的正则表达式并使它们对其他人可读。谢谢!