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

Roc*_*nce 11 regex r hyphen

尽管阅读了R regex帮助页面

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

我无法理解之间的区别

grepl(pattern=paste("^thing1\\-",sep=""),x="thing1-thing2")
Run Code Online (Sandbox Code Playgroud)

grepl(pattern=paste("^thing1-",sep=""),x="thing1-thing2")
Run Code Online (Sandbox Code Playgroud)

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

hwn*_*wnd 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
Run Code Online (Sandbox Code Playgroud)

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


Jos*_*ien 6

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

grepl("[w-y]", "x")
# [1] TRUE
grepl("[w-y]", "-")
# [1] FALSE
grepl("[wy-]", "-")
# [1] TRUE
grepl("[wy-]", "x")
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)