破折号是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】:
连字符主要是正则表达式中的普通字符。
您不需要在字符类之外转义连字符;没有特殊意义。
在字符类[ ]
中,您可以将连字符作为范围内的first 或last 字符。如果您将连字符放在其他任何地方,您需要对其进行转义才能将其添加到您的类中。
例子:
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
注意:在字符类中找到first或last的连字符更为常见。
【讨论】:
【参考方案2】:在这些情况下,它们都匹配完全相同的文本。即:
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"
【讨论】:
【参考方案3】:要了解-
在字符类中具有特殊含义意味着什么(以及如何将其放在最后赋予其字面意义),请尝试以下操作:
grepl("[w-y]", "x")
# [1] TRUE
grepl("[w-y]", "-")
# [1] FALSE
grepl("[wy-]", "-")
# [1] TRUE
grepl("[wy-]", "x")
# [1] FALSE
【讨论】:
以上是关于破折号是R正则表达式中的特殊字符吗?的主要内容,如果未能解决你的问题,请参考以下文章