【问题标题】:is dash a special character in R regex?破折号是R正则表达式中的特殊字符吗?
【发布时间】:2014-07-31 23:57:53
【问题描述】:

尽管阅读了help page of R regex

最后,要包含一个字面值 -,将它放在首位或最后(或者,对于 perl = 仅限 TRUE,前面加反斜杠)。

我无法理解两者之间的区别

grepl(pattern=paste("^thing1\\-",sep=""),x="thing1-thing2")

grepl(pattern=paste("^thing1-",sep=""),x="thing1-thing2")

两者都返回 TRUE。我应该逃还是不在这里?最佳做法是什么?

【问题讨论】:

  • - 在字符类中是特殊的,在哪里匹配字母或- 你必须写[-a-zA-z] 但我不认为它在它们之外。帮助页面的那部分似乎专门讨论了字符类。

标签: regex r hyphen


【解决方案1】:

连字符主要是正则表达式中的普通字符。

您不需要在字符类之外转义连字符;没有特殊意义。

在字符类[ ] 中,您可以将连字符作为范围内的firstlast 字符。如果您将连字符放在其他任何地方,您需要对其进行转义才能将其添加到您的类中。

例子:

grepl('^thing1-', x='thing1-thing2')
[1] TRUE
grepl('[-a-z]+', 'foo-bar')
[1] TRUE
grepl('[a-z-]+', 'foo-bar')
[1] TRUE
grepl('[a-z\\-\\d]+', 'foo-bar')
[1] TRUE

注意:在字符类中找到firstlast的连字符更为常见。

【讨论】:

    【解决方案2】:

    在这些情况下,它们都匹配完全相同的文本。即:

    x <- "thing1-thing2"
    regmatches(x,regexpr("^thing1\\-",x))
    #[1] "thing1-"
    regmatches(x,regexpr("^thing1-",x))
    #[1] "thing1-"
    

    在某些情况下使用- 是一个特殊字符,用于指定值的范围,例如在[] 中指定时,az 之间的字符,例如:

    regmatches(x,regexpr("[a-z]+",x))
    #[1] "thing"
    

    【讨论】:

      【解决方案3】:

      要了解- 在字符类中具有特殊含义意味着什么(以及如何将其放在最后赋予其字面意义),请尝试以下操作:

      grepl("[w-y]", "x")
      # [1] TRUE
      grepl("[w-y]", "-")
      # [1] FALSE
      grepl("[wy-]", "-")
      # [1] TRUE
      grepl("[wy-]", "x")
      # [1] FALSE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多