【问题标题】:Access regex group results by name using gregexpr in R在 R 中使用 gregexpr 按名称访问正则表达式组结果
【发布时间】:2017-04-17 22:21:45
【问题描述】:

如何使用gregexpr()in R 访问所有带有分组的匹配项(即label)?

s <- "aaa123bbb345ccc"
p <- "(?<label>\\d+)"
m <- gregexpr(p, s, perl = TRUE)

我有兴趣在 m 中打印匹配项,但引用组名 &lt;label1&gt;。这可以在 C# 中轻松完成,但我在 R 中苦苦挣扎,我无法从 CRAN 文档中弄清楚如何做到这一点。

编辑:G Grothendieck 请求的以下 C# 代码:

string s = "aaa123bbb345ccc";
string p = @"(?<label>\d+)";
Regex r = new Regex(p);
Match m = r.Match(s);
if (m.Success)
{
    Console.WriteLine(m.Groups["label"].Value);
}

【问题讨论】:

标签: c# r regex grouping


【解决方案1】:

这将只返回与label 关联的子字符串。

st <- attr(m[[1]], "capture.start")[, "label"]
len <- attr(m[[1]], "capture.length")[, "label"]
substring(s, st, st + len - 1)
## [1] "123" "345"

【讨论】:

  • 谢谢,这很接近。我收到“capture.start[, "label"] 中的错误:下标越界”。
  • 我已经修改了几次答案。检查最新的。如果在问题中提供的代码之后运行,它对我有用。
  • 有效!这就是我一直在寻找的。我希望这在 R 中会更容易,就像在 C# 中一样,但它提供了我需要的东西。
  • 您能否在问题的底部添加一些代码,提供一个 C# 代码示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
  • 2014-08-11
  • 2018-01-29
  • 1970-01-01
相关资源
最近更新 更多