为什么'[, - \\]'匹配'46','X','A',

时间:2017-08-01 13:35:55

标签: r regex

我尝试使用strsplit(str, '[,-\\+]')拆分字符串,这意味着任何',', '-' or '+'都可以是分隔符。但是,我发现这种模式似乎也匹配数字和大写字母。 试试

  • grep('[,-\\]', 'X'), returns 1
  • grep('[,-\\]', '46'), returns 1
  • grep('[,-\\]', '-'), returns 1
  • grep('[,-\\]', ','), returns 1

似乎'[,-\\]'匹配所有数字,大写字母,',''-'

我只是不明白为什么会这样。

感谢您提供任何意见

1 个答案:

答案 0 :(得分:3)

您需要使用

strsplit(str, '[,+-]')

分割为, +-。如果您需要添加\以进行拆分,请将'[,\\+-]'默认 TRE正则表达式引擎一起使用。

-在括号表达式的末尾(或者在开头)时,它被解析为文字连字符。在您的情况下,它被视为范围运算符,'[,-\\]'匹配,\之间的一系列字符:

enter image description here

请注意,您在此处使用TRE正则表达式风格(因为未指定perl=TRUE),因此,双反斜杠在正则表达式模式中被视为文字反斜杠。如果使用PCRE正则表达式引擎解析模式,"[,-\\]"模式将无效,您需要在字符串文字中定义一个带有4个反斜杠的反斜杠。