6

r中的正则表达式 \\s|*和有什么区别?\\s|[*]

> gsub('\\s|*','','Aug 2013*')
[1] "Aug2013*"
> gsub('\\s|[*]','','Aug 2013*')
[1] "Aug2013"

这里的作用是[ ]什么?

4

2 回答 2

5

第一个表达式在您使用它的方式上是无效的,因此*是一个特殊字符。如果要使用subgsub这种方式带有特殊字符,可以使用fixed = TRUE参数集。

这采用表示正在搜索的模式的字符串,并忽略任何特殊字符。

请参阅文档Pattern Matching and ReplacementR

x <- 'Aug 2013****'
gsub('*', '', x, fixed=TRUE)
#[1] "Aug 2013"

你的第二个表达式只是使用一个字符类[]*避免转义,就像..

x <- 'Aug 2013*'
gsub('\\s|\\*', '', x)
#[1] "Aug2013"

至于你的第一个表达的解释:\\s|*

\s      whitespace (\n, \r, \t, \f, and " ")
|       OR

第二个表达式:\\s|[*]

\s      whitespace (\n, \r, \t, \f, and " ")
|       OR
[*]     any character of: '*'
于 2013-11-03T02:37:06.903 回答
3

这里的使用[]只不过是为了逃避*字面星号。

第一个正则表达式无效(*是特殊字符,意思是“零个或多个”)。

第二个正则表达式相当于

'\\s|\\*'
于 2013-11-03T02:15:49.847 回答