破折号是R正则表达式中的特殊字符吗?

Posted

技术标签:

【中文标题】破折号是R正则表达式中的特殊字符吗?【英文标题】:is dash a special character in R regex? 【发布时间】: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] 但我不认为它在它们之外。帮助页面的那部分似乎专门讨论了字符类。 【参考方案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

【讨论】:

以上是关于破折号是R正则表达式中的特殊字符吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 R 中的正则表达式提取 2 个或多个特殊字符之间的值? [复制]

如何编写正则表达式以仅匹配数字、字母和破折号?

量词可以用于R中的正则表达式替换吗?

破折号分隔字符串中负值和正值的正则表达式

正则中需要转义的特殊字符小结

javascript正则表达式