2017-08-01 50 views
4

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

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

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

我只是不明白为什么会出现这种情况。

谢谢你的任何输入

+0

如果我改变模式的顺序,如'[\\ +, - ]',那么它只匹配'+',','和' - '。我很困惑 –

+0

可能的重复[如何匹配连字符与正则表达式?](https://stackoverflow.com/questions/4068629/how-to-match-hyphens-with-regular-expression) –

回答

3

您需要使用

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

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

-位于括号表达式的末尾(或开始处)时,它将被解析为文字连字符。在你的情况下,它被视为一个范围内运营商和'[,-\\]',\的范围内字符相匹配:

enter image description here

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

+1

这是很有意义的我!谢谢!! –

相关问题