【问题标题】:Invalid regexp in RR中的正则表达式无效
【发布时间】:2015-07-21 17:48:59
【问题描述】:

我正在尝试在 R 中使用这个正则表达式:

\?(?=([^'\\]*(\\.|'([^'\\]*\\.)*[^'\\]*'))*[^']*$)

我是这样逃跑的:

\\?(?=([^'\\\\]*(\\\\.|'([^'\\\\]*\\\\.)*[^'\\\\]*'))*[^']*$)

我收到 invalid regexp 错误。

Regexpal 的正则表达式没有问题,我检查了 R 错误消息中解释的正则表达式与我在 Regex pal 中使用的完全一样,所以我有点不知所措。我认为逃跑不是问题。

代码:

output <- sub("\\?(?=([^'\\\\]*(\\\\.|'([^'\\\\]*\\\\.)*[^'\\\\]*'))*[^']*$)", "!", "This is a test string?")

【问题讨论】:

  • 只需设置T &lt;- 0(可能由设置生存分析模拟的人编写),看看会发生什么。 (那就试试TRUE &lt;- 0

标签: regex r


【解决方案1】:

R 默认使用POSIXPortable O操作S系统I界面) 正则表达式标准(请参阅这些 SO 帖子 [1,2] 和 ?regex [caveat emptor:砍刀级密度提前])。

前瞻((?=...))、后瞻((?&lt;=...))及其否定((?!...)(?&lt;!...))可能是PCRE特定(Perl-C兼容R常规Expressions)形式,与POSIX不兼容。

R 可以通过激活perl 选项来训练TRUE 来理解您的正则表达式;此选项适用于所有 base 正则表达式函数(gsubgreplregmatches 等):

output <- sub(
  "\\?(?=([^'\\\\]*(\\\\.|'([^'\\\\]*\\\\.)*[^'\\\\]*'))*[^']*$)",
  "!",
  "This is a test string?",
  perl = TRUE
)

当然,对于具有原始字符串支持的 R>=4.0,它看起来不那么令人生畏:

output <- sub(
  R"(\?(?=([^'\\]*(\\.|'([^'\\]*\\.)*[^'\\]*'))*[^']*$))",
  "!",
  "This is a test string?",
  perl = TRUE
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2018-10-21
    • 1970-01-01
    相关资源
    最近更新 更多