最后,要包含一个文字 - ,将它放在第一个或最后一个(或者,对于perl =仅为TRUE,在反斜杠之前。)
我无法理解
之间的区别grepl(pattern=paste("^thing1\\-",sep=""),x="thing1-thing2")
和
grepl(pattern=paste("^thing1-",sep=""),x="thing1-thing2")
两者都返回TRUE。我应该逃避还是不在这里?什么是最佳做法?
答案 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-"
在某些情况下,使用-
是一个特殊字符,用于指定值的范围,例如a
和z
中[]
指定的字符,例如:
regmatches(x,regexpr("[a-z]+",x))
#[1] "thing"