【问题标题】:Why is this regex using lookbehinds invalid in R?为什么这个使用lookbehinds的正则表达式在R中无效?
【发布时间】:2012-11-05 09:40:02
【问题描述】:

我正在尝试在 R 中执行后向正则表达式来查找模式。我希望这会拉出 'bob' 中的 'b',但我得到了一个错误。

> regexpr("(?<=a)b","thingamabob")
Error in regexpr("(?<=a)b", "thingamabob") : 
invalid regular expression '(?<=a)b', reason 'Invalid regexp'

这不会引发错误,但它也找不到任何东西。

> regexpr("(.<=a)b","thingamabob")
[1] -1
attr(,"match.length")
[1] -1
attr(,"useBytes")
[1] TRUE

我很困惑,因为 regexpr 的帮助页面明确指出后向应该可以工作:http://stat.ethz.ch/R-manual/R-patched/library/base/html/regex.html

有什么想法吗?

【问题讨论】:

  • 哦,文档....尝试设置perl = TRUE
  • 哦,很好,但是为此类问题获得代表让我感觉很肮脏。
  • @joran 如果它让你感觉更好,我们都可以否决你吗? ;)
  • @Dason 如果你愿意花费代表来减轻我的罪恶感,我绝不会妨碍你! :)
  • 如果您试图从第一个 b 之后的 a 之后获取所有内容,那么这将在没有后视的情况下完成:library(gsubfn); strapplyc("thingamabob", "a(b.*)")

标签: regex r


【解决方案1】:

你只需要通过设置perl = TRUE来切换到PERL正则表达式。

【讨论】:

  • 不管问题是否简单。我仍然缺少那一小部分。谢谢。
  • @joran,你能解释一下Perl到底在做什么吗?我在这里搜索并找到了这个perl: logical. Should perl-compatible regexps be used? Has priority over extendedendmemo.com/r/sub.php。但对我来说仍然不清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
相关资源
最近更新 更多