【问题标题】:grepl with regex带有正则表达式的 grepl
【发布时间】:2017-06-03 18:43:05
【问题描述】:

我在使用带有正则表达式的 grepl 时遇到了困难。

这是一个小例子:

我有一个字符向量:

text <- c(

  "D_Purpose__Repairs" ,
  "Age" ,
  "F_Job"  
)

我想选择以 D_ 或 F_ 开头的单词。所以我写:

grepl("\\>D_.+ | \\>F_.+", text)

grepl("\\D_.+ | \\F_.+", text)

grepl("\\^D_.+ | \\^F_.+", text)

但是这会返回:

[1] FALSE FALSE FALSE

您能否帮助我了解我做错了什么以及我应该如何更正我的代码?

您的建议将不胜感激。

【问题讨论】:

    标签: r regex grepl


    【解决方案1】:

    您不需要(也绝不能)使用反斜杠转义插入符,并且您不能在正则表达式中的 | 周围放置额外的空格。这可以按您的意愿工作:

    > grepl("^D_.+|^F_.+", text)
    [1]  TRUE FALSE  TRUE
    

    【讨论】:

      【解决方案2】:

      你的图案上的一些 cmets:

      • \&gt;D_.+ | \&gt;F_.+ - 这里,\&gt; 匹配单词位置的结尾,而这里的实际位置是单词的开始(因此,您可能想尝试使用 @987654323 @|are meaningful, you should not add them unless you use aperl=TRUEwith a(?x)`修饰符。

      • \D_.+ | \F_.+ 是格式错误的模式,因为\F 是未知的正则表达式转义。 \D 匹配除数字以外的任何字符,这显然是您没有想到的。

      • \^D_.+ | \^F_.+ 是最接近的,但又有多余的空格,转义的^ 匹配文字插入符号。如果您不转义插入符号,它们将匹配字符串位置的开头。

      现在,这里最有效的模式是

      grepl("^[DF]_.+", text)
      

      意思:

      • ^ - 字符串锚的开始
      • [DF] - DF 字母
      • _ - 文字下划线
      • .+ - 任意 1+ 个字符,直到字符串末尾。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 2017-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多