在R正则表达式中突破一个特殊字符?

时间:2014-06-11 03:37:37

标签: regex r hyphen

尽管阅读help page of R regex

  

最后,要包含一个文字 - ,将它放在第一个或最后一个(或者,对于perl   =仅为TRUE,在反斜杠之前。)

我无法理解

之间的区别
grepl(pattern=paste("^thing1\\-",sep=""),x="thing1-thing2")

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

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

3 个答案:

答案 0 :(得分:11)

连字符在正则表达式中主要是正常字符。

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

在字符类[ ]中,您可以将连字符设置为范围中的第一个最后一个字符。如果你将连字符放在任何其他地方,你需要将它转义为你的类。

示例:

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

注意:更常见的是在字符类中找到第一个最后的连字符。

答案 1 :(得分:6)

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

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

答案 2 :(得分:1)

它们都匹配这些实例中的完全相同的文本。即:

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"